diff options
author | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-02-23 15:53:30 +0000 |
---|---|---|
committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-02-23 15:53:30 +0000 |
commit | b2ae2c0fd509bd37c1b63f63dc5be53a7ea4b609 (patch) | |
tree | 3f8fd1143cfccc454d1b7d9b5d1854bd88ab6e40 /llvm/lib/MC/MCParser/AsmParser.cpp | |
parent | 37b012df8f192e21d62eaf7614e9df3fc8d09877 (diff) | |
download | bcm5719-llvm-b2ae2c0fd509bd37c1b63f63dc5be53a7ea4b609.tar.gz bcm5719-llvm-b2ae2c0fd509bd37c1b63f63dc5be53a7ea4b609.zip |
MCAsmParser: add support for .err directive
The .err directive produces an error whenever it is assembled. This can be
useful for preventing assembly when an unexpected condition occurs.
llvm-svn: 201984
Diffstat (limited to 'llvm/lib/MC/MCParser/AsmParser.cpp')
-rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index c2998ab8ccc..d77a0fd1b69 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -361,6 +361,7 @@ private: DK_CFI_REGISTER, DK_CFI_WINDOW_SAVE, DK_MACROS_ON, DK_MACROS_OFF, DK_MACRO, DK_ENDM, DK_ENDMACRO, DK_PURGEM, DK_SLEB128, DK_ULEB128, + DK_ERR, DK_END }; @@ -471,6 +472,9 @@ private: // "end" bool parseDirectiveEnd(SMLoc DirectiveLoc); + // "err" + bool parseDirectiveErr(SMLoc DirectiveLoc); + void initializeDirectiveKindMap(); }; } @@ -1526,6 +1530,8 @@ bool AsmParser::parseStatement(ParseStatementInfo &Info) { return parseDirectivePurgeMacro(IDLoc); case DK_END: return parseDirectiveEnd(IDLoc); + case DK_ERR: + return parseDirectiveErr(IDLoc); } return Error(IDLoc, "unknown directive"); @@ -3931,6 +3937,15 @@ bool AsmParser::parseDirectiveEnd(SMLoc DirectiveLoc) { return false; } +/// parseDirectiveErr +/// ::= .err +bool AsmParser::parseDirectiveErr(SMLoc Loc) { + if (!TheCondStack.empty()) + if (TheCondStack.back().Ignore) + return false; + return Error(Loc, ".err encountered"); +} + /// parseDirectiveEndIf /// ::= .endif bool AsmParser::parseDirectiveEndIf(SMLoc DirectiveLoc) { @@ -4054,6 +4069,7 @@ void AsmParser::initializeDirectiveKindMap() { DirectiveKindMap[".endm"] = DK_ENDM; DirectiveKindMap[".endmacro"] = DK_ENDMACRO; DirectiveKindMap[".purgem"] = DK_PURGEM; + DirectiveKindMap[".err"] = DK_ERR; } MCAsmMacro *AsmParser::parseMacroLikeBody(SMLoc DirectiveLoc) { |