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 | a0d16299c958cde0802d84144c9b1bc524da4f79 (patch) | |
tree | f29bb38aed7c3a583bb67c359cc43c026ad52bae /lib/MC/MCParser/AsmParser.cpp | |
parent | da6ffb33d2bf42ff7f10dc1983123ea00f58840f (diff) | |
download | llvm-a0d16299c958cde0802d84144c9b1bc524da4f79.tar.gz llvm-a0d16299c958cde0802d84144c9b1bc524da4f79.tar.bz2 llvm-a0d16299c958cde0802d84144c9b1bc524da4f79.tar.xz |
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201984 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCParser/AsmParser.cpp')
-rw-r--r-- | lib/MC/MCParser/AsmParser.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp index c2998ab8cc..d77a0fd1b6 100644 --- a/lib/MC/MCParser/AsmParser.cpp +++ b/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) { |