# RUN: not llvm-mc -triple x86_64-windows-msvc %s -filetype=obj -o /dev/null 2>&1 | FileCheck %s --implicit-check-not=error: # RUN: not llvm-mc -triple x86_64-windows-msvc %s -o /dev/null 2>&1 | FileCheck %s --implicit-check-not=error: .text # CHECK: error: .seh_ directive must appear within an active frame .seh_handlerdata .seh_pushreg %rsi # 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 %rsi pushq %rdi .seh_pushreg %rdi pushq %rbx .seh_pushreg %rbx 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 %rsi # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: .seh_ directive must appear within an active frame g: .seh_proc g pushq %rbp .seh_pushreg %rbx pushq %rsi .seh_pushreg %rsi .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 %xmm7, 44 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: offset is not a multiple of 16 .seh_savexmm %xmm7, 48 movaps %xmm6, 32(%rsp) # 16-byte Spill .seh_savexmm %xmm6, 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 .globl i .def i; .scl 2; .type 32; .endef .p2align 4, 0x90 i: .seh_proc i pushq %rbp .seh_pushreg 17 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: incorrect register number for use with this directive pushq %rbx .seh_pushreg %xmm0 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: register is not supported for use with this directive leaq 16(%rsp), %rbp .seh_setframe %xmm0, 16 # CHECK: :[[@LINE-1]]:{{[0-9]+}}: error: register is not supported for use with this directive .seh_endprologue ret .seh_endproc