diff options
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/MC/AsmParser/assembler-expressions-fail.s | 18 | ||||
-rw-r--r-- | llvm/test/MC/AsmParser/assembler-expressions-inlineasm.ll | 14 | ||||
-rw-r--r-- | llvm/test/MC/AsmParser/assembler-expressions.s | 47 | ||||
-rw-r--r-- | llvm/test/MC/AsmParser/directive_fill.s | 4 |
4 files changed, 81 insertions, 2 deletions
diff --git a/llvm/test/MC/AsmParser/assembler-expressions-fail.s b/llvm/test/MC/AsmParser/assembler-expressions-fail.s new file mode 100644 index 00000000000..dd6fe929b68 --- /dev/null +++ b/llvm/test/MC/AsmParser/assembler-expressions-fail.s @@ -0,0 +1,18 @@ +# RUN: not llvm-mc -triple x86_64-unknown-unknown %s 2>&1 | FileCheck %s --check-prefix=ERR +# RUN: not llvm-mc -filetype=obj -triple x86_64-unknown-unknown %s 2>&1 | FileCheck %s --check-prefix=ERR + +.text + +test2: + jmp baz +# ERR: [[@LINE+1]]:5: error: expected absolute expression +.if . - text2 == 1 + nop +.else + ret +.endif + push fs + +# No additional errors. +# +# ERR-NOT: {{[0-9]+}}:{{[0-9]+}}: error: diff --git a/llvm/test/MC/AsmParser/assembler-expressions-inlineasm.ll b/llvm/test/MC/AsmParser/assembler-expressions-inlineasm.ll new file mode 100644 index 00000000000..35f110f37e2 --- /dev/null +++ b/llvm/test/MC/AsmParser/assembler-expressions-inlineasm.ll @@ -0,0 +1,14 @@ +; RUN: not llc -mtriple x86_64-unknown-linux-gnu -o %t.s -filetype=asm %s 2>&1 | FileCheck %s +; RUN: not llc -mtriple x86_64-unknown-linux-gnu -o %t.o -filetype=obj %s 2>&1 | FileCheck %s + +; Assembler-aware expression evaluation should be disabled in inline +; assembly to prevent differences in behavior between object and +; assembly output. + + +; CHECK: <inline asm>:1:17: error: expected absolute expression + +define i32 @main() local_unnamed_addr { + tail call void asm sideeffect "foo: nop; .if . - foo==1; nop;.endif", "~{dirflag},~{fpsr},~{flags}"() + ret i32 0 +} diff --git a/llvm/test/MC/AsmParser/assembler-expressions.s b/llvm/test/MC/AsmParser/assembler-expressions.s new file mode 100644 index 00000000000..9bc17363ff5 --- /dev/null +++ b/llvm/test/MC/AsmParser/assembler-expressions.s @@ -0,0 +1,47 @@ +# RUN: not llvm-mc -triple x86_64-unknown-unknown %s 2>&1 | FileCheck %s --check-prefix=ASM-ERR +# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %s | llvm-objdump -j .data -s - | FileCheck %s --check-prefix=OBJDATA +# RUN: llvm-mc -filetype=obj -triple x86_64-unknown-unknown %s | llvm-objdump -j .text -s - | FileCheck %s --check-prefix=OBJTEXT +.data + +# OBJDATA: Contents of section .data +# OBJDATA-NEXT: 0000 aa0506ff + +foo2: +# ASM-ERR: [[@LINE+1]]:5: error: expected absolute expression +.if . - foo2 == 0 + .byte 0xaa +.else + .byte 0x00 +.endif + +foo3: + .byte 5 +# ASM-ERR: [[@LINE+1]]:5: error: expected absolute expression +.if . - foo3 == 1 + .byte 6 +.else + .byte 7 +.endif + +.byte 0xff + +# nop is a fixed size instruction so this should pass. + +# OBJTEXT: Contents of section .text +# OBJTEXT-NEXT: 0000 9090ff34 25 + +.text + +text1: + nop +# ASM-ERR: [[@LINE+1]]:5: error: expected absolute expression +.if . - text1 == 1 + nop +.else + ret +.endif + push gs + +# No additional errors. +# +# ASM-ERR-NOT: {{[0-9]+}}:{{[0-9]+}}: error: diff --git a/llvm/test/MC/AsmParser/directive_fill.s b/llvm/test/MC/AsmParser/directive_fill.s index 64d0936e516..8297f9da426 100644 --- a/llvm/test/MC/AsmParser/directive_fill.s +++ b/llvm/test/MC/AsmParser/directive_fill.s @@ -1,7 +1,7 @@ # RUN: llvm-mc -triple i386-unknown-unknown %s 2> %t.err | FileCheck %s # RUN: FileCheck --check-prefix=CHECK-WARNINGS %s < %t.err -# RUN: llvm-mc -triple i386-unknown-unknown -filetype=obj -o %t.o %s 2> %t.err -# RUN: FileCheck --check-prefix=OBJ-WARNINGS %s < %t.err +# RUN: llvm-mc -triple i386-unknown-unknown -filetype=obj -o %t.o %s 2> %t.err2 +# RUN: FileCheck --check-prefix=OBJ-WARNINGS %s < %t.err2 # CHECK: TEST0: # CHECK: .fill 1, 1, 0xa |