[llvm] r201784 - AsmParser: Disable Darwin-style macro argument expansion on non-darwin targets.
Benjamin Kramer
benny.kra at googlemail.com
Thu Feb 20 05:36:33 PST 2014
Author: d0k
Date: Thu Feb 20 07:36:32 2014
New Revision: 201784
URL: http://llvm.org/viewvc/llvm-project?rev=201784&view=rev
Log:
AsmParser: Disable Darwin-style macro argument expansion on non-darwin targets.
There is code in the wild that relies on $0 not being expanded.
Modified:
llvm/trunk/lib/MC/MCParser/AsmParser.cpp
llvm/trunk/test/MC/AsmParser/exprs.s
llvm/trunk/test/MC/AsmParser/macros-gas.s
Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=201784&r1=201783&r2=201784&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Thu Feb 20 07:36:32 2014
@@ -1730,7 +1730,7 @@ bool AsmParser::expandMacro(raw_svector_
ArrayRef<MCAsmMacroParameter> Parameters,
ArrayRef<MCAsmMacroArgument> A, const SMLoc &L) {
unsigned NParameters = Parameters.size();
- if (NParameters != 0 && NParameters != A.size())
+ if ((!IsDarwin || NParameters != 0) && NParameters != A.size())
return Error(L, "Wrong number of arguments");
// A macro without parameters is handled differently on Darwin:
@@ -1740,7 +1740,7 @@ bool AsmParser::expandMacro(raw_svector_
std::size_t End = Body.size(), Pos = 0;
for (; Pos != End; ++Pos) {
// Check for a substitution or escape.
- if (!NParameters) {
+ if (IsDarwin && !NParameters) {
// This macro has no parameters, look for $0, $1, etc.
if (Body[Pos] != '$' || Pos + 1 == End)
continue;
@@ -1763,7 +1763,7 @@ bool AsmParser::expandMacro(raw_svector_
if (Pos == End)
break;
- if (!NParameters) {
+ if (IsDarwin && !NParameters) {
switch (Body[Pos + 1]) {
// $$ => $
case '$':
Modified: llvm/trunk/test/MC/AsmParser/exprs.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AsmParser/exprs.s?rev=201784&r1=201783&r2=201784&view=diff
==============================================================================
--- llvm/trunk/test/MC/AsmParser/exprs.s (original)
+++ llvm/trunk/test/MC/AsmParser/exprs.s Thu Feb 20 07:36:32 2014
@@ -1,4 +1,4 @@
-// RUN: llvm-mc -triple i386-unknown-unknown %s > %t
+// RUN: llvm-mc -triple i386-apple-darwin %s
.macro check_expr
.if ($0) != ($1)
Modified: llvm/trunk/test/MC/AsmParser/macros-gas.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AsmParser/macros-gas.s?rev=201784&r1=201783&r2=201784&view=diff
==============================================================================
--- llvm/trunk/test/MC/AsmParser/macros-gas.s (original)
+++ llvm/trunk/test/MC/AsmParser/macros-gas.s Thu Feb 20 07:36:32 2014
@@ -91,3 +91,15 @@ test8 1,2 3
// CHECK: .ascii "1,2,3"
test8 1 2, 3
+
+.macro test10
+.ascii "$20"
+.endm
+
+test10
+// CHECK: .ascii "$20"
+
+test10 42
+// CHECK-ERRORS: 102:10: error: Wrong number of arguments
+// CHECK-ERRORS-NEXT: test10 42
+// CHECK-ERRORS-NEXT: ^
More information about the llvm-commits
mailing list