AsmParser: Add support for the .purgem directive.
Based on a patch by Team PaX. llvm-svn: 156709
This commit is contained in:
parent
38de62f883
commit
95d31bcba5
|
@ -336,6 +336,7 @@ public:
|
|||
AddDirectiveHandler<&GenericAsmParser::ParseDirectiveMacro>(".macro");
|
||||
AddDirectiveHandler<&GenericAsmParser::ParseDirectiveEndMacro>(".endm");
|
||||
AddDirectiveHandler<&GenericAsmParser::ParseDirectiveEndMacro>(".endmacro");
|
||||
AddDirectiveHandler<&GenericAsmParser::ParseDirectivePurgeMacro>(".purgem");
|
||||
|
||||
AddDirectiveHandler<&GenericAsmParser::ParseDirectiveLEB128>(".sleb128");
|
||||
AddDirectiveHandler<&GenericAsmParser::ParseDirectiveLEB128>(".uleb128");
|
||||
|
@ -367,6 +368,7 @@ public:
|
|||
bool ParseDirectiveMacrosOnOff(StringRef, SMLoc DirectiveLoc);
|
||||
bool ParseDirectiveMacro(StringRef, SMLoc DirectiveLoc);
|
||||
bool ParseDirectiveEndMacro(StringRef, SMLoc DirectiveLoc);
|
||||
bool ParseDirectivePurgeMacro(StringRef, SMLoc DirectiveLoc);
|
||||
|
||||
bool ParseDirectiveLEB128(StringRef, SMLoc);
|
||||
};
|
||||
|
@ -3083,6 +3085,27 @@ bool GenericAsmParser::ParseDirectiveEndMacro(StringRef Directive,
|
|||
"no current macro definition");
|
||||
}
|
||||
|
||||
/// ParseDirectivePurgeMacro
|
||||
/// ::= .purgem
|
||||
bool GenericAsmParser::ParseDirectivePurgeMacro(StringRef Directive,
|
||||
SMLoc DirectiveLoc) {
|
||||
StringRef Name;
|
||||
if (getParser().ParseIdentifier(Name))
|
||||
return TokError("expected identifier in '.purgem' directive");
|
||||
|
||||
if (getLexer().isNot(AsmToken::EndOfStatement))
|
||||
return TokError("unexpected token in '.purgem' directive");
|
||||
|
||||
StringMap<Macro*>::iterator I = getParser().MacroMap.find(Name);
|
||||
if (I == getParser().MacroMap.end())
|
||||
return Error(DirectiveLoc, "macro '" + Name + "' is not defined");
|
||||
|
||||
// Undefine the macro.
|
||||
delete I->getValue();
|
||||
getParser().MacroMap.erase(I);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GenericAsmParser::ParseDirectiveLEB128(StringRef DirName, SMLoc) {
|
||||
getParser().CheckForValidSection();
|
||||
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
# RUN: not llvm-mc -triple i386-unknown-unknown %s |& FileCheck %s
|
||||
|
||||
.macro foo
|
||||
.err
|
||||
.endm
|
||||
|
||||
.purgem bar
|
||||
# CHECK: error: macro 'bar' is not defined
|
||||
|
||||
.purgem foo
|
||||
foo
|
||||
# CHECK: error: invalid instruction mnemonic 'foo'
|
Loading…
Reference in New Issue