aboutsummaryrefslogtreecommitdiff
path: root/test/MC/AsmParser/seh-directive-errors.s
diff options
context:
space:
mode:
Diffstat (limited to 'test/MC/AsmParser/seh-directive-errors.s')
-rw-r--r--test/MC/AsmParser/seh-directive-errors.s96
1 files changed, 96 insertions, 0 deletions
diff --git a/test/MC/AsmParser/seh-directive-errors.s b/test/MC/AsmParser/seh-directive-errors.s
new file mode 100644
index 00000000000..5fa6c7846e7
--- /dev/null
+++ b/test/MC/AsmParser/seh-directive-errors.s
@@ -0,0 +1,96 @@
+# RUN: not llvm-mc %s -filetype=obj -o /dev/null 2>&1 | FileCheck %s --implicit-check-not=error:
+ .text
+
+ .seh_pushreg 6
+ # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: .seh_ directive must appear within an active frame
+
+ .seh_stackalloc 32
+ # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: .seh_ directive must appear within an active frame
+
+ .def f;
+ .scl 2;
+ .type 32;
+ .endef
+ .globl f # -- Begin function f
+ .p2align 4, 0x90
+f: # @f
+.seh_proc f
+ pushq %rsi
+ .seh_pushreg 6
+ pushq %rdi
+ .seh_pushreg 7
+ pushq %rbx
+ .seh_pushreg 3
+ subq $32, %rsp
+ .seh_stackalloc 0
+ # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: stack allocation size must be non-zero
+ .seh_stackalloc 7
+ # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: stack allocation size is not a multiple of 8
+ .seh_stackalloc 32
+ .seh_endprologue
+ nop
+ addq $32, %rsp
+ popq %rbx
+ popq %rdi
+ popq %rsi
+ retq
+ .seh_handlerdata
+ .text
+ .seh_endproc
+
+
+ .seh_pushreg 6
+ # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: .seh_ directive must appear within an active frame
+
+g:
+ .seh_proc g
+ pushq %rbp
+ .seh_pushreg 3
+ pushq %rsi
+ .seh_pushreg 6
+ .seh_endprologue
+ .seh_setframe 3 255
+ # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: you must specify a stack pointer offset
+ .seh_setframe 3, 255
+ # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: offset is not a multiple of 16
+ .seh_setframe 3, 256
+ # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: frame offset must be less than or equal to 240
+ .seh_setframe 3, 128
+ .seh_setframe 3, 128
+ # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: frame register and offset can be set at most once
+ nop
+ popq %rsi
+ popq %rbp
+ retq
+ .seh_endproc
+
+ .globl h # -- Begin function h
+ .p2align 4, 0x90
+h: # @h
+.seh_proc h
+# BB#0: # %entry
+ subq $72, %rsp
+ .seh_stackalloc 72
+ movaps %xmm7, 48(%rsp) # 16-byte Spill
+ .seh_savexmm 7 44
+ # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: you must specify an offset on the stack
+ .seh_savexmm 7, 44
+ # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: offset is not a multiple of 16
+ .seh_savexmm 7, 48
+ movaps %xmm6, 32(%rsp) # 16-byte Spill
+ .seh_savexmm 6, 32
+ .seh_endprologue
+ movapd %xmm0, %xmm6
+ callq getdbl
+ movapd %xmm0, %xmm7
+ addsd %xmm6, %xmm7
+ callq getdbl
+ addsd %xmm7, %xmm0
+ movaps 32(%rsp), %xmm6 # 16-byte Reload
+ movaps 48(%rsp), %xmm7 # 16-byte Reload
+ addq $72, %rsp
+ retq
+ .seh_handlerdata
+ .text
+ .seh_endproc
+ # -- End function