From 59f6c76703a5a85b53a6192f7c28b85fe69ab07e Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Thu, 20 Feb 2014 13:36:32 +0000 Subject: [PATCH] AsmParser: Disable Darwin-style macro argument expansion on non-darwin targets. There is code in the wild that relies on $0 not being expanded. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201784 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/MCParser/AsmParser.cpp | 6 +++--- test/MC/AsmParser/exprs.s | 2 +- test/MC/AsmParser/macros-gas.s | 12 ++++++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index f73e56ade2d..c4dfc75c6d2 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -1730,7 +1730,7 @@ bool AsmParser::expandMacro(raw_svector_ostream &OS, StringRef Body, ArrayRef Parameters, ArrayRef 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_ostream &OS, StringRef Body, 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_ostream &OS, StringRef Body, if (Pos == End) break; - if (!NParameters) { + if (IsDarwin && !NParameters) { switch (Body[Pos + 1]) { // $$ => $ case '$': diff --git a/test/MC/AsmParser/exprs.s b/test/MC/AsmParser/exprs.s index a7e10020b67..c5fc9b594a0 100644 --- a/test/MC/AsmParser/exprs.s +++ b/test/MC/AsmParser/exprs.s @@ -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) diff --git a/test/MC/AsmParser/macros-gas.s b/test/MC/AsmParser/macros-gas.s index 6c75363b5e3..d907a2517f8 100644 --- a/test/MC/AsmParser/macros-gas.s +++ b/test/MC/AsmParser/macros-gas.s @@ -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: ^ -- 2.34.1