1283015SdimPull in r200383 from upstream llvm trunk (by David Majnemer): 2283015Sdim 3283015Sdim MC: Reorganize macro MC test along dialect lines 4283015Sdim 5283015Sdim This commit seeks to do two things: 6283015Sdim - Run the surfeit of tests under the Darwin dialect. This ends up 7283015Sdim affecting tests which assumed that spaces could deliminate arguments. 8283015Sdim - The GAS dialect tests should limit their surface area to things that 9283015Sdim could plausibly work under GAS. For example, Darwin style arguments 10283015Sdim have no business being in such a test. 11283015Sdim 12274294SdimPull in r201784 from upstream llvm trunk (by Benjamin Kramer): 13274294Sdim 14274294Sdim AsmParser: Disable Darwin-style macro argument expansion on non-darwin targets. 15274294Sdim 16274294Sdim There is code in the wild that relies on $0 not being expanded. 17274294Sdim 18274294SdimThis fixes some cases of using $ signs in literals being incorrectly 19274294Sdimassembled. 20274294Sdim 21274294SdimReported by: Richard Henderson 22274294SdimUpstream PR: http://llvm.org/PR21500 23274294Sdim 24274294SdimIntroduced here: http://svnweb.freebsd.org/changeset/base/274286 25274294Sdim 26274294SdimIndex: lib/MC/MCParser/AsmParser.cpp 27274294Sdim=================================================================== 28274294Sdim--- lib/MC/MCParser/AsmParser.cpp 29274294Sdim+++ lib/MC/MCParser/AsmParser.cpp 30274294Sdim@@ -1695,7 +1695,7 @@ bool AsmParser::expandMacro(raw_svector_ostream &O 31274294Sdim const MCAsmMacroParameters &Parameters, 32274294Sdim const MCAsmMacroArguments &A, const SMLoc &L) { 33274294Sdim unsigned NParameters = Parameters.size(); 34274294Sdim- if (NParameters != 0 && NParameters != A.size()) 35274294Sdim+ if ((!IsDarwin || NParameters != 0) && NParameters != A.size()) 36274294Sdim return Error(L, "Wrong number of arguments"); 37274294Sdim 38274294Sdim // A macro without parameters is handled differently on Darwin: 39274294Sdim@@ -1705,7 +1705,7 @@ bool AsmParser::expandMacro(raw_svector_ostream &O 40274294Sdim std::size_t End = Body.size(), Pos = 0; 41274294Sdim for (; Pos != End; ++Pos) { 42274294Sdim // Check for a substitution or escape. 43274294Sdim- if (!NParameters) { 44274294Sdim+ if (IsDarwin && !NParameters) { 45274294Sdim // This macro has no parameters, look for $0, $1, etc. 46274294Sdim if (Body[Pos] != '$' || Pos + 1 == End) 47274294Sdim continue; 48274294Sdim@@ -1728,7 +1728,7 @@ bool AsmParser::expandMacro(raw_svector_ostream &O 49274294Sdim if (Pos == End) 50274294Sdim break; 51274294Sdim 52274294Sdim- if (!NParameters) { 53274294Sdim+ if (IsDarwin && !NParameters) { 54274294Sdim switch (Body[Pos + 1]) { 55274294Sdim // $$ => $ 56274294Sdim case '$': 57274294SdimIndex: test/MC/AsmParser/exprs.s 58274294Sdim=================================================================== 59274294Sdim--- test/MC/AsmParser/exprs.s 60274294Sdim+++ test/MC/AsmParser/exprs.s 61274294Sdim@@ -1,4 +1,4 @@ 62274294Sdim-// RUN: llvm-mc -triple i386-unknown-unknown %s > %t 63274294Sdim+// RUN: llvm-mc -triple i386-apple-darwin %s 64274294Sdim 65274294Sdim .macro check_expr 66274294Sdim .if ($0) != ($1) 67283015SdimIndex: test/MC/AsmParser/macros.s (deleted) 68283015Sdim=================================================================== 69283015SdimIndex: test/MC/AsmParser/macros-darwin.s 70283015Sdim=================================================================== 71283015Sdim--- test/MC/AsmParser/macros-darwin.s 72283015Sdim+++ test/MC/AsmParser/macros-darwin.s 73283015Sdim@@ -1,9 +1,97 @@ 74283015Sdim-// RUN: llvm-mc -triple i386-apple-darwin10 %s | FileCheck %s 75283015Sdim+// RUN: not llvm-mc -triple i386-apple-darwin10 %s 2> %t.err | FileCheck %s 76283015Sdim+// RUN: FileCheck --check-prefix=CHECK-ERRORS %s < %t.err 77283015Sdim 78283015Sdim-.macro test1 79283015Sdim+.macro .test0 80283015Sdim+.macrobody0 81283015Sdim+.endmacro 82283015Sdim+.macro .test1 83283015Sdim+.test0 84283015Sdim+.endmacro 85283015Sdim+ 86283015Sdim+.test1 87283015Sdim+// CHECK-ERRORS: <instantiation>:1:1: error: unknown directive 88283015Sdim+// CHECK-ERRORS-NEXT: macrobody0 89283015Sdim+// CHECK-ERRORS-NEXT: ^ 90283015Sdim+// CHECK-ERRORS: <instantiation>:1:1: note: while in macro instantiation 91283015Sdim+// CHECK-ERRORS-NEXT: .test0 92283015Sdim+// CHECK-ERRORS-NEXT: ^ 93283015Sdim+// CHECK-ERRORS: 11:1: note: while in macro instantiation 94283015Sdim+// CHECK-ERRORS-NEXT: .test1 95283015Sdim+// CHECK-ERRORS-NEXT: ^ 96283015Sdim+ 97283015Sdim+.macro test2 98283015Sdim+.byte $0 99283015Sdim+.endmacro 100283015Sdim+// CHECK: .byte 10 101283015Sdim+test2 10 102283015Sdim+ 103283015Sdim+.macro test3 104283015Sdim .globl "$0 $1 $2 $$3 $n" 105283015Sdim .endmacro 106283015Sdim 107283015Sdim // CHECK: .globl "1 23 $3 2" 108283015Sdim-test1 1, 2 3 109283015Sdim+test3 1, 2 3 110283015Sdim 111283015Sdim+// CHECK: .globl "1 (23) $3 2" 112283015Sdim+test3 1, (2 3) 113283015Sdim+ 114283015Sdim+// CHECK: .globl "12 $3 1" 115283015Sdim+test3 1 2 116283015Sdim+ 117283015Sdim+.macro test4 118283015Sdim+.globl "$0 -- $1" 119283015Sdim+.endmacro 120283015Sdim+ 121283015Sdim+// CHECK: .globl "(ab)(,)) -- (cd)" 122283015Sdim+test4 (a b)(,)),(cd) 123283015Sdim+ 124283015Sdim+// CHECK: .globl "(ab)(,)) -- (cd)" 125283015Sdim+test4 (a b)(,)),(cd) 126283015Sdim+ 127283015Sdim+.macro test5 _a 128283015Sdim+.globl "\_a" 129283015Sdim+.endm 130283015Sdim+ 131283015Sdim+// CHECK: .globl zed1 132283015Sdim+test5 zed1 133283015Sdim+ 134283015Sdim+.macro test6 $a 135283015Sdim+.globl "\$a" 136283015Sdim+.endm 137283015Sdim+ 138283015Sdim+// CHECK: .globl zed2 139283015Sdim+test6 zed2 140283015Sdim+ 141283015Sdim+.macro test7 .a 142283015Sdim+.globl "\.a" 143283015Sdim+.endm 144283015Sdim+ 145283015Sdim+// CHECK: .globl zed3 146283015Sdim+test7 zed3 147283015Sdim+ 148283015Sdim+.macro test8 _a, _b, _c 149283015Sdim+.globl "\_a,\_b,\_c" 150283015Sdim+.endmacro 151283015Sdim+ 152283015Sdim+.macro test9 _a _b _c 153283015Sdim+.globl "\_a \_b \_c" 154283015Sdim+.endmacro 155283015Sdim+ 156283015Sdim+// CHECK: .globl "a,b,c" 157283015Sdim+test8 a, b, c 158283015Sdim+// CHECK: .globl "%1,%2,%3" 159283015Sdim+test8 %1, %2, %3 #a comment 160283015Sdim+// CHECK: .globl "x-y,z,1" 161283015Sdim+test8 x - y, z, 1 162283015Sdim+// CHECK: .globl "1 2 3" 163283015Sdim+test9 1, 2,3 164283015Sdim+ 165283015Sdim+test8 1,2 3 166283015Sdim+// CHECK-ERRORS: error: macro argument '_c' is missing 167283015Sdim+// CHECK-ERRORS-NEXT: test8 1,2 3 168283015Sdim+// CHECK-ERRORS-NEXT: ^ 169283015Sdim+ 170283015Sdim+test8 1 2, 3 171283015Sdim+// CHECK-ERRORS: error: macro argument '_c' is missing 172283015Sdim+// CHECK-ERRORS-NEXT:test8 1 2, 3 173283015Sdim+// CHECK-ERRORS-NEXT: ^ 174283015SdimIndex: test/MC/AsmParser/macros-gas.s 175283015Sdim=================================================================== 176283015Sdim--- test/MC/AsmParser/macros-gas.s 177283015Sdim+++ test/MC/AsmParser/macros-gas.s 178283015Sdim@@ -0,0 +1,93 @@ 179283015Sdim+// RUN: not llvm-mc -triple i386-linux-gnu %s 2> %t.err | FileCheck %s 180283015Sdim+// RUN: FileCheck --check-prefix=CHECK-ERRORS %s < %t.err 181283015Sdim+ 182283015Sdim+.macro .test0 183283015Sdim+.macrobody0 184283015Sdim+.endm 185283015Sdim+.macro .test1 186283015Sdim+.test0 187283015Sdim+.endm 188283015Sdim+ 189283015Sdim+.test1 190283015Sdim+// CHECK-ERRORS: <instantiation>:1:1: error: unknown directive 191283015Sdim+// CHECK-ERRORS-NEXT: macrobody0 192283015Sdim+// CHECK-ERRORS-NEXT: ^ 193283015Sdim+// CHECK-ERRORS: <instantiation>:1:1: note: while in macro instantiation 194283015Sdim+// CHECK-ERRORS-NEXT: .test0 195283015Sdim+// CHECK-ERRORS-NEXT: ^ 196283015Sdim+// CHECK-ERRORS: 11:1: note: while in macro instantiation 197283015Sdim+// CHECK-ERRORS-NEXT: .test1 198283015Sdim+// CHECK-ERRORS-NEXT: ^ 199283015Sdim+ 200283015Sdim+.macro test2 _a 201283015Sdim+.byte \_a 202283015Sdim+.endm 203283015Sdim+// CHECK: .byte 10 204283015Sdim+test2 10 205283015Sdim+ 206283015Sdim+.macro test3 _a _b _c 207283015Sdim+.ascii "\_a \_b \_c \\_c" 208283015Sdim+.endm 209283015Sdim+ 210283015Sdim+// CHECK: .ascii "1 2 3 \003" 211283015Sdim+test3 1, 2, 3 212283015Sdim+ 213283015Sdim+// FIXME: test3 1, 2 3 should be treated like test 1, 2, 3 214283015Sdim+ 215283015Sdim+// FIXME: remove the n argument from the remaining test3 examples 216283015Sdim+// CHECK: .ascii "1 (23) n \n" 217283015Sdim+test3 1, (2 3), n 218283015Sdim+ 219283015Sdim+// CHECK: .ascii "1 (23) n \n" 220283015Sdim+test3 1 (2 3) n 221283015Sdim+ 222283015Sdim+// CHECK: .ascii "1 2 n \n" 223283015Sdim+test3 1 2 n 224283015Sdim+ 225283015Sdim+.macro test5 _a 226283015Sdim+.globl \_a 227283015Sdim+.endm 228283015Sdim+ 229283015Sdim+// CHECK: .globl zed1 230283015Sdim+test5 zed1 231283015Sdim+ 232283015Sdim+.macro test6 $a 233283015Sdim+.globl \$a 234283015Sdim+.endm 235283015Sdim+ 236283015Sdim+// CHECK: .globl zed2 237283015Sdim+test6 zed2 238283015Sdim+ 239283015Sdim+.macro test7 .a 240283015Sdim+.globl \.a 241283015Sdim+.endm 242283015Sdim+ 243283015Sdim+// CHECK: .globl zed3 244283015Sdim+test7 zed3 245283015Sdim+ 246283015Sdim+.macro test8 _a, _b, _c 247283015Sdim+.ascii "\_a,\_b,\_c" 248283015Sdim+.endm 249283015Sdim+ 250283015Sdim+.macro test9 _a _b _c 251283015Sdim+.ascii "\_a \_b \_c" 252283015Sdim+.endm 253283015Sdim+ 254283015Sdim+// CHECK: .ascii "a,b,c" 255283015Sdim+test8 a, b, c 256283015Sdim+// CHECK: .ascii "%1,%2,%3" 257283015Sdim+test8 %1 %2 %3 #a comment 258283015Sdim+// CHECK: .ascii "x-y,z,1" 259283015Sdim+test8 x - y z 1 260283015Sdim+// CHECK: .ascii "1 2 3" 261283015Sdim+test9 1, 2,3 262283015Sdim+ 263283015Sdim+test8 1,2 3 264283015Sdim+// CHECK-ERRORS: error: macro argument '_c' is missing 265283015Sdim+// CHECK-ERRORS-NEXT: test8 1,2 3 266283015Sdim+// CHECK-ERRORS-NEXT: ^ 267283015Sdim+ 268283015Sdim+test8 1 2, 3 269283015Sdim+// CHECK-ERRORS: error: expected ' ' for macro argument separator 270283015Sdim+// CHECK-ERRORS-NEXT:test8 1 2, 3 271283015Sdim+// CHECK-ERRORS-NEXT: ^ 272