[AsmParser]Emit an error if a macro has two (or more) parameters sharing the same name

Introducing a new error to macro parameters' parsing:
currently, llvm-mc won't complain if a macro have two (or more) named params with the same name.
this behavior is false, as there's no merit in having some params sharing a name.
now, instead of tolerate such a phenomena - emit an appropriate error.

Differential Revision: https://reviews.llvm.org/D31674


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@299815 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Coby Tayree 2017-04-08 20:29:03 +00:00
parent 0b9a8d8fd2
commit b28be420c0
2 changed files with 13 additions and 0 deletions

View File

@ -3874,6 +3874,12 @@ bool AsmParser::parseDirectiveMacro(SMLoc DirectiveLoc) {
if (parseIdentifier(Parameter.Name))
return TokError("expected identifier in '.macro' directive");
// Emit an error if two (or more) named parameters share the same name
for (const MCAsmMacroParameter& CurrParam : Parameters)
if (CurrParam.Name.equals(Parameter.Name))
return TokError("macro '" + Name + "' has multiple parameters"
" named '" + Parameter.Name + "'");
if (Lexer.is(AsmToken::Colon)) {
Lex(); // consume ':'

View File

@ -0,0 +1,7 @@
// RUN: not llvm-mc %s 2> %t
// RUN: FileCheck < %t %s
.macro M a a
.endm
// CHECK: macro 'M' has multiple parameters named 'a'