summaryrefslogtreecommitdiff
path: root/lib/MC/MCParser/AsmParser.cpp
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2014-02-23 15:53:30 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2014-02-23 15:53:30 +0000
commita0d16299c958cde0802d84144c9b1bc524da4f79 (patch)
treef29bb38aed7c3a583bb67c359cc43c026ad52bae /lib/MC/MCParser/AsmParser.cpp
parentda6ffb33d2bf42ff7f10dc1983123ea00f58840f (diff)
downloadllvm-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.cpp16
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) {