[llvm-commits] [llvm] r43611 - /llvm/trunk/lib/VMCore/Verifier.cpp

Duncan Sands baldrick at free.fr
Thu Nov 1 03:50:27 PDT 2007


Author: baldrick
Date: Thu Nov  1 05:50:26 2007
New Revision: 43611

URL: http://llvm.org/viewvc/llvm-project?rev=43611&view=rev
Log:
Don't barf on empty basic blocks.  Do not rely on assert
doing something - this needs to work for release builds
too.  I chose to just abort rather than following the
fancy logic of abortIfBroken, because (1) it is a pain
to do otherwise, and (2) nothing is going to work if the
module is this broken.

Modified:
    llvm/trunk/lib/VMCore/Verifier.cpp

Modified: llvm/trunk/lib/VMCore/Verifier.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Verifier.cpp?rev=43611&r1=43610&r2=43611&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/Verifier.cpp (original)
+++ llvm/trunk/lib/VMCore/Verifier.cpp Thu Nov  1 05:50:26 2007
@@ -69,22 +69,34 @@
 namespace {  // Anonymous namespace for class
   struct VISIBILITY_HIDDEN PreVerifier : public FunctionPass {
     static char ID; // Pass ID, replacement for typeid
-  	
+
     PreVerifier() : FunctionPass((intptr_t)&ID) { }
-  	
+
+    // Check that the prerequisites for successful DominatorTree construction
+    // are satisfied.
     bool runOnFunction(Function &F) {
-      for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I)
-        assert(I->back().isTerminator()
-               && "Block does not end with a terminator?");
-      
-        return false;
+      bool Broken = false;
+
+      for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I) {
+        if (I->empty() || !I->back().isTerminator()) {
+          cerr << "Basic Block does not have terminator!\n";
+          WriteAsOperand(*cerr, I, true);
+          cerr << "\n";
+          Broken = true;
+        }
+      }
+
+      if (Broken)
+        abort();
+
+      return false;
     }
   };
-  
+
   char PreVerifier::ID = 0;
   RegisterPass<PreVerifier> PreVer("preverify", "Preliminary module verification");
   const PassInfo *PreVerifyID = PreVer.getPassInfo();
-  
+
   struct VISIBILITY_HIDDEN
      Verifier : public FunctionPass, InstVisitor<Verifier> {
     static char ID; // Pass ID, replacement for typeid





More information about the llvm-commits mailing list