From e25c6b95cec7d8e774488c867998a94c3110250f Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Tue, 10 Aug 2010 17:38:52 +0000 Subject: [PATCH] MC/AsmParser: Fix a bug in macro argument parsing, which was dropping parentheses from argument lists. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110692 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/MC/MCParser/AsmParser.cpp | 12 +++++++----- test/MC/AsmParser/macros.s | 7 +++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index f4de09a1c0a..70a37e3009b 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -1032,12 +1032,14 @@ bool AsmParser::HandleMacroEntry(StringRef Name, SMLoc NameLoc, // list. if (ParenLevel == 0 && Lexer.is(AsmToken::Comma)) { MacroArguments.push_back(std::vector()); - } else if (Lexer.is(AsmToken::LParen)) { - ++ParenLevel; - } else if (Lexer.is(AsmToken::RParen)) { - if (ParenLevel) - --ParenLevel; } else { + // Adjust the current parentheses level. + if (Lexer.is(AsmToken::LParen)) + ++ParenLevel; + else if (Lexer.is(AsmToken::RParen) && ParenLevel) + --ParenLevel; + + // Append the token to the current argument list. MacroArguments.back().push_back(getTok()); } Lex(); diff --git a/test/MC/AsmParser/macros.s b/test/MC/AsmParser/macros.s index 8bbb481d974..214274d9aa8 100644 --- a/test/MC/AsmParser/macros.s +++ b/test/MC/AsmParser/macros.s @@ -30,3 +30,10 @@ test2 10 // CHECK: .globl "1 23 $3 2" test3 1,2 3 + +.macro test4 +.globl "$0 -- $1" +.endmacro + +// CHECK: .globl "ab)(,) -- (cd)" +test4 a b)(,),(cd) -- 2.34.1