llvm-mc: Make sure we exit != 0 if any errors are encountered.
authorDaniel Dunbar <daniel@zuster.org>
Thu, 9 Sep 2010 22:42:56 +0000 (22:42 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 9 Sep 2010 22:42:56 +0000 (22:42 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113551 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCParser/AsmParser.cpp
test/MC/AsmParser/directive_abort.s

index 310574fe27be5acd3b4e322b2476c61e04f34904..34197cf7defa108e82091d1337564c0970dcf65f 100644 (file)
@@ -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
index 1fd1f6e44a32ceb7534b23356808a958a6479217..86e6267a7a1eb21f386860c13a571d5098cda249 100644 (file)
@@ -1,4 +1,4 @@
-# RUN: llvm-mc -triple i386-unknown-unknown %s 2> %t
+# RUN: not llvm-mc -triple i386-unknown-unknown %s 2> %t
 # RUN: FileCheck -input-file %t %s
 
 # CHECK: error: .abort 'please stop assembing'