diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index a7045c5cd59..aa0f9f0ced9 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/lib/MC/MCParser/AsmParser.cpp @@ -183,7 +183,7 @@ private: bool ParseDirectiveFill(); // ".fill" bool ParseDirectiveSpace(); // ".space" bool ParseDirectiveZero(); // ".zero" - bool ParseDirectiveSet(); // ".set" + bool ParseDirectiveSet(StringRef IDVal); // ".set" or ".equ" bool ParseDirectiveOrg(); // ".org" // ".align{,32}", ".p2align{,w,l}" bool ParseDirectiveAlign(bool IsPow2, unsigned ValueSize); @@ -913,8 +913,8 @@ bool AsmParser::ParseStatement() { // Otherwise, we have a normal instruction or directive. if (IDVal[0] == '.') { // Assembler features - if (IDVal == ".set") - return ParseDirectiveSet(); + if (IDVal == ".set" || IDVal == ".equ") + return ParseDirectiveSet(IDVal); // Data directives @@ -1275,14 +1275,14 @@ bool AsmParser::ParseIdentifier(StringRef &Res) { /// ParseDirectiveSet: /// ::= .set identifier ',' expression -bool AsmParser::ParseDirectiveSet() { +bool AsmParser::ParseDirectiveSet(StringRef IDVal) { StringRef Name; if (ParseIdentifier(Name)) - return TokError("expected identifier after '.set' directive"); + return TokError("expected identifier after '" + Twine(IDVal.str()) + "'"); if (getLexer().isNot(AsmToken::Comma)) - return TokError("unexpected token in '.set'"); + return TokError("unexpected token in '" + Twine(IDVal.str()) + "'"); Lex(); return ParseAssignment(Name); diff --git a/test/MC/AsmParser/directive_set.s b/test/MC/AsmParser/directive_set.s index f1fc30a85df..69abce0db2f 100644 --- a/test/MC/AsmParser/directive_set.s +++ b/test/MC/AsmParser/directive_set.s @@ -5,3 +5,8 @@ TEST0: .set a, 0 +# CHECK: TEST1: +# CHECK: a = 0 +TEST1: + .equ a, 0 +