mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
[MC] Reorganize and improve macro tests
* Reorganize tests and add coverage * Improve diagnostic testing * Make assert() tests more relevant * Rename tests to macro-* or altmacro-* This is not NFC because a (previously untested) diagnostic message is changed.
This commit is contained in:
parent
b8d9da6193
commit
93d7286ccd
@ -4382,9 +4382,9 @@ bool AsmParser::parseDirectiveMacro(SMLoc DirectiveLoc) {
|
|||||||
while (getLexer().isNot(AsmToken::EndOfStatement)) {
|
while (getLexer().isNot(AsmToken::EndOfStatement)) {
|
||||||
|
|
||||||
if (!Parameters.empty() && Parameters.back().Vararg)
|
if (!Parameters.empty() && Parameters.back().Vararg)
|
||||||
return Error(Lexer.getLoc(),
|
return Error(Lexer.getLoc(), "vararg parameter '" +
|
||||||
"Vararg parameter '" + Parameters.back().Name +
|
Parameters.back().Name +
|
||||||
"' should be last one in the list of parameters.");
|
"' should be the last parameter");
|
||||||
|
|
||||||
MCAsmMacroParameter Parameter;
|
MCAsmMacroParameter Parameter;
|
||||||
if (parseIdentifier(Parameter.Name))
|
if (parseIdentifier(Parameter.Name))
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
// RUN: not llvm-mc -triple x86_64-apple-darwin10 %s 2>&1 | FileCheck %s
|
|
||||||
|
|
||||||
.macro 23
|
|
||||||
|
|
||||||
// CHECK: expected identifier in '.macro' directive
|
|
||||||
|
|
||||||
.macro abc 33
|
|
||||||
|
|
||||||
// CHECK: expected identifier in '.macro' directive
|
|
@ -1,9 +0,0 @@
|
|||||||
// RUN: not llvm-mc -triple i686-linux -o /dev/null %s
|
|
||||||
|
|
||||||
.macro macro parameter=0
|
|
||||||
.if \parameter
|
|
||||||
.else
|
|
||||||
.endm
|
|
||||||
|
|
||||||
macro 1
|
|
||||||
|
|
@ -44,3 +44,13 @@ double second = 1, 2
|
|||||||
# CHECK-NEXT:double third = 0
|
# CHECK-NEXT:double third = 0
|
||||||
# CHECK-NEXT: ^
|
# CHECK-NEXT: ^
|
||||||
double third = 0
|
double third = 0
|
||||||
|
|
||||||
|
# CHECK-NEXT:{{.*}}.s:[[#@LINE+3]]:8: error: expected identifier in '.macro' directive
|
||||||
|
# CHECK-NEXT:.macro 23
|
||||||
|
# CHECK-NEXT: ^
|
||||||
|
.macro 23
|
||||||
|
|
||||||
|
# CHECK-NEXT:{{.*}}.s:[[#@LINE+3]]:10: error: expected identifier in '.macro' directive
|
||||||
|
# CHECK-NEXT:.macro a 23
|
||||||
|
# CHECK-NEXT: ^
|
||||||
|
.macro a 23
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
;; Test that macros in inline assembly blocks share the same context,
|
||||||
|
;; thus a definition is available to the whole file. PR36110
|
||||||
; RUN: not llc < %s 2>&1 | FileCheck %s
|
; RUN: not llc < %s 2>&1 | FileCheck %s
|
||||||
; REQUIRES: default_triple
|
; REQUIRES: default_triple
|
||||||
|
|
17
test/MC/AsmParser/macro-vararg-err.s
Normal file
17
test/MC/AsmParser/macro-vararg-err.s
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# RUN: not llvm-mc -triple=x86_64 %s -o /dev/null 2>&1 | FileCheck %s --match-full-lines --strict-whitespace
|
||||||
|
|
||||||
|
# CHECK:{{.*}}.s:[[#@LINE+3]]:21: error: vararg parameter 'a' should be the last parameter
|
||||||
|
# CHECK-NEXT:.macro two a:vararg b:vararg
|
||||||
|
# CHECK-NEXT: ^
|
||||||
|
.macro two a:vararg b:vararg
|
||||||
|
|
||||||
|
# CHECK:{{.*}}.s:[[#@LINE+3]]:17: error: expected identifier in '.macro' directive
|
||||||
|
# CHECK-NEXT:.macro one a:req:vararg
|
||||||
|
# CHECK-NEXT: ^
|
||||||
|
.macro one a:req:vararg
|
||||||
|
|
||||||
|
# CHECK-NEXT:{{.*}}.s:[[#@LINE+3]]:32: warning: pointless default value for required parameter 'a' in macro 'pointless_default'
|
||||||
|
# CHECK-NEXT:.macro pointless_default a:req=default
|
||||||
|
# CHECK-NEXT: ^
|
||||||
|
.macro pointless_default a:req=default
|
||||||
|
.endm
|
37
test/MC/AsmParser/macro-vararg.s
Normal file
37
test/MC/AsmParser/macro-vararg.s
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
# RUN: llvm-mc -triple=x86_64 %s | FileCheck %s
|
||||||
|
.macro one a:vararg
|
||||||
|
.ascii "|\a"
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# CHECK: .byte 124
|
||||||
|
one
|
||||||
|
# CHECK: .ascii "|1"
|
||||||
|
one 1
|
||||||
|
## Difference: GNU as squeezes repeated spaces.
|
||||||
|
# CHECK: .ascii "|1 2"
|
||||||
|
one 1 2
|
||||||
|
## Difference: GNU as non-x86 drops the space before '(' (gas PR/25750)
|
||||||
|
# CHECK: .ascii "|1 (2 3"
|
||||||
|
one 1 (2 3
|
||||||
|
# CHECK: .ascii "|1 2 3)"
|
||||||
|
one 1 2 3)
|
||||||
|
|
||||||
|
.macro two a, b:vararg
|
||||||
|
.ascii "|\a|\b"
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# CHECK: .ascii "||"
|
||||||
|
two
|
||||||
|
# CHECK: .ascii "|1|"
|
||||||
|
two 1
|
||||||
|
## Difference: GNU as squeezes repeated spaces.
|
||||||
|
# CHECK: .ascii "|1|2 3"
|
||||||
|
two 1 2 3
|
||||||
|
|
||||||
|
## Parameters can be separated by spaces
|
||||||
|
.macro two1 a b:vararg
|
||||||
|
.ascii "|\a|\b"
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# CHECK: .ascii "|1|2"
|
||||||
|
two1 1 2
|
12
test/MC/AsmParser/unmatched-if-macro.s
Normal file
12
test/MC/AsmParser/unmatched-if-macro.s
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# RUN: not llvm-mc -triple x86_64 %s -o /dev/null 2>&1 | FileCheck %s
|
||||||
|
|
||||||
|
## This also tests that we don't assert due to an active macro instantiation.
|
||||||
|
# CHECK: <instantiation>:4:1: error: unmatched .ifs or .elses
|
||||||
|
|
||||||
|
.macro macro parameter=0
|
||||||
|
.if \parameter
|
||||||
|
.else
|
||||||
|
.endm
|
||||||
|
|
||||||
|
macro 1
|
||||||
|
|
5
test/MC/AsmParser/unmatched-if.s
Normal file
5
test/MC/AsmParser/unmatched-if.s
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# RUN: not llvm-mc -triple=x86_64 %s -o /dev/null 2>&1 | FileCheck %s
|
||||||
|
|
||||||
|
# CHECK: {{.*}}.s:6:1: error: unmatched .ifs or .elses
|
||||||
|
.if 1
|
||||||
|
.else
|
@ -1,51 +0,0 @@
|
|||||||
// RUN: llvm-mc -triple x86_64-linux-gnu %s | FileCheck %s
|
|
||||||
.macro ifcc arg:vararg
|
|
||||||
.if cc
|
|
||||||
\arg
|
|
||||||
.endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro ifcc2 arg0 arg1:vararg
|
|
||||||
.if cc
|
|
||||||
movl \arg0, \arg1
|
|
||||||
.endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro ifcc3 arg0, arg1:vararg
|
|
||||||
.if cc
|
|
||||||
movl \arg0, \arg1
|
|
||||||
.endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro ifcc4 arg0, arg1:vararg
|
|
||||||
.if cc
|
|
||||||
movl \arg1, \arg0
|
|
||||||
.endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.text
|
|
||||||
|
|
||||||
// CHECK: movl %esp, %ebp
|
|
||||||
// CHECK: subl $0, %esp
|
|
||||||
// CHECK: movl %eax, %ebx
|
|
||||||
// CHECK: movl %ecx, %ebx
|
|
||||||
// CHECK: movl %ecx, %eax
|
|
||||||
// CHECK: movl %eax, %ecx
|
|
||||||
// CHECK: movl %ecx, %eax
|
|
||||||
// CHECK: movl %eax, %ecx
|
|
||||||
.set cc,1
|
|
||||||
ifcc movl %esp, %ebp
|
|
||||||
subl $0, %esp
|
|
||||||
|
|
||||||
ifcc2 %eax %ebx
|
|
||||||
ifcc2 %ecx, %ebx
|
|
||||||
ifcc3 %ecx %eax
|
|
||||||
ifcc3 %eax, %ecx
|
|
||||||
ifcc4 %eax %ecx ## test
|
|
||||||
ifcc4 %ecx, %eax ## test
|
|
||||||
|
|
||||||
// CHECK-NOT: movl
|
|
||||||
// CHECK: subl $1, %esp
|
|
||||||
.set cc,0
|
|
||||||
ifcc movl %esp, %ebp
|
|
||||||
subl $1, %esp
|
|
Loading…
Reference in New Issue
Block a user