Add a check to ensure that only PHI nodes are self referential. Code
authorChris Lattner <sabre@nondot.org>
Thu, 14 Mar 2002 16:53:48 +0000 (16:53 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 14 Mar 2002 16:53:48 +0000 (16:53 +0000)
input to instruction combination was broken, which caused it to explode.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1870 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Verifier.cpp

index 6e18a824a4ef3d67a24390f42088f6c0e89267fc..d7c209cc9bc6024358242b8ee454013ad55adb4b 100644 (file)
@@ -17,7 +17,7 @@
 //  . It should be illegal to put a label into any other type (like a structure)
 //    or to return one. [except constant arrays!]
 //  . Right now 'add bool 0, 0' is valid.  This isn't particularly good.
-//  . Only phi nodes can be self referential: 'add int %0, %0 ; <int>:0' is bad
+//  * Only phi nodes can be self referential: 'add int %0, %0 ; <int>:0' is bad
 //  * PHI nodes must have an entry for each predecessor, with no extras.
 //  * All basic blocks should only end with terminator insts, not contain them
 //  * The entry node to a method must not have predecessors
@@ -119,7 +119,14 @@ static bool verifyInstruction(const Instruction *I) {
            E = Preds.end(); I != E; ++I)
       Assert2(0, "PHI node does not have entry for a predecessor basic block!",
               PN, *I);
+  } else {
+    // Check that non-phi nodes are not self referential...
+    for (Value::use_const_iterator UI = I->use_begin(), UE = I->use_end();
+         UI != UE; ++UI)
+      Assert1(*UI != (const User*)I,
+              "Only PHI nodes may reference their own value!", I);
   }
+
   return Broken;
 }