summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/MC/AsmParser/assembler-expressions-fail.s18
-rw-r--r--llvm/test/MC/AsmParser/assembler-expressions-inlineasm.ll14
-rw-r--r--llvm/test/MC/AsmParser/assembler-expressions.s47
-rw-r--r--llvm/test/MC/AsmParser/directive_fill.s4
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
OpenPOWER on IntegriCloud