patch-r274286-llvm-r201784-asm-dollar.diff revision 274373
1Pull in r201784 from upstream llvm trunk (by Benjamin Kramer): 2 3 AsmParser: Disable Darwin-style macro argument expansion on non-darwin targets. 4 5 There is code in the wild that relies on $0 not being expanded. 6 7This fixes some cases of using $ signs in literals being incorrectly 8assembled. 9 10Reported by: Richard Henderson 11Upstream PR: http://llvm.org/PR21500 12 13Introduced here: http://svnweb.freebsd.org/changeset/base/274286 14 15Index: lib/MC/MCParser/AsmParser.cpp 16=================================================================== 17--- lib/MC/MCParser/AsmParser.cpp 18+++ lib/MC/MCParser/AsmParser.cpp 19@@ -1695,7 +1695,7 @@ bool AsmParser::expandMacro(raw_svector_ostream &O 20 const MCAsmMacroParameters &Parameters, 21 const MCAsmMacroArguments &A, const SMLoc &L) { 22 unsigned NParameters = Parameters.size(); 23- if (NParameters != 0 && NParameters != A.size()) 24+ if ((!IsDarwin || NParameters != 0) && NParameters != A.size()) 25 return Error(L, "Wrong number of arguments"); 26 27 // A macro without parameters is handled differently on Darwin: 28@@ -1705,7 +1705,7 @@ bool AsmParser::expandMacro(raw_svector_ostream &O 29 std::size_t End = Body.size(), Pos = 0; 30 for (; Pos != End; ++Pos) { 31 // Check for a substitution or escape. 32- if (!NParameters) { 33+ if (IsDarwin && !NParameters) { 34 // This macro has no parameters, look for $0, $1, etc. 35 if (Body[Pos] != '$' || Pos + 1 == End) 36 continue; 37@@ -1728,7 +1728,7 @@ bool AsmParser::expandMacro(raw_svector_ostream &O 38 if (Pos == End) 39 break; 40 41- if (!NParameters) { 42+ if (IsDarwin && !NParameters) { 43 switch (Body[Pos + 1]) { 44 // $$ => $ 45 case '$': 46Index: test/MC/AsmParser/exprs.s 47=================================================================== 48--- test/MC/AsmParser/exprs.s 49+++ test/MC/AsmParser/exprs.s 50@@ -1,4 +1,4 @@ 51-// RUN: llvm-mc -triple i386-unknown-unknown %s > %t 52+// RUN: llvm-mc -triple i386-apple-darwin %s 53 54 .macro check_expr 55 .if ($0) != ($1) 56