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