aboutsummaryrefslogtreecommitdiffstats
path: root/lib/MC/MCParser
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-09-09 22:42:56 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-09-09 22:42:56 +0000
commit93bd4d1e6b81b71ce56888e760ce0c9abe44023f (patch)
tree9eac7c2142d0e000fadbd2f74e289a4610acfac3 /lib/MC/MCParser
parent61ca48e0da42edbb4cc98305cb9e617473da7bba (diff)
downloadexternal_llvm-93bd4d1e6b81b71ce56888e760ce0c9abe44023f.zip
external_llvm-93bd4d1e6b81b71ce56888e760ce0c9abe44023f.tar.gz
external_llvm-93bd4d1e6b81b71ce56888e760ce0c9abe44023f.tar.bz2
llvm-mc: Make sure we exit != 0 if any errors are encountered.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113551 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCParser')
-rw-r--r--lib/MC/MCParser/AsmParser.cpp18
1 files changed, 10 insertions, 8 deletions
diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp
index 310574f..34197cf 100644
--- a/lib/MC/MCParser/AsmParser.cpp
+++ b/lib/MC/MCParser/AsmParser.cpp
@@ -102,6 +102,9 @@ private:
/// Boolean tracking whether macro substitution is enabled.
unsigned MacrosEnabled : 1;
+ /// Flag tracking whether any errors have been encountered.
+ unsigned HadError : 1;
+
public:
AsmParser(const Target &T, SourceMgr &SM, MCContext &Ctx, MCStreamer &Out,
const MCAsmInfo &MAI);
@@ -304,6 +307,7 @@ void AsmParser::Warning(SMLoc L, const Twine &Msg) {
}
bool AsmParser::Error(SMLoc L, const Twine &Msg) {
+ HadError = true;
PrintMessage(L, Msg.str(), "error");
PrintMacroInstantiations();
return true;
@@ -361,17 +365,17 @@ bool AsmParser::Run(bool NoInitialTextSection, bool NoFinalize) {
// Prime the lexer.
Lex();
-
- bool HadError = false;
-
+
+ HadError = false;
AsmCond StartingCondState = TheCondState;
// While we have input, parse each statement.
while (Lexer.isNot(AsmToken::Eof)) {
if (!ParseStatement()) continue;
- // We had an error, remember it and recover by skipping to the next line.
- HadError = true;
+ // We had an error, validate that one was emitted and recover by skipping to
+ // the next line.
+ assert(HadError && "Parse statement returned an error, but none emitted!");
EatToEndOfStatement();
}
@@ -383,10 +387,8 @@ bool AsmParser::Run(bool NoInitialTextSection, bool NoFinalize) {
const std::vector<MCDwarfFile *> &MCDwarfFiles =
getContext().getMCDwarfFiles();
for (unsigned i = 1; i < MCDwarfFiles.size(); i++) {
- if (!MCDwarfFiles[i]){
+ if (!MCDwarfFiles[i])
TokError("unassigned file number: " + Twine(i) + " for .file directives");
- HadError = true;
- }
}
// Finalize the output stream if there are no errors and if the client wants