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

Nick Lewycky nicholas at mxc.ca
Sun Sep 13 14:07:59 PDT 2009


Author: nicholas
Date: Sun Sep 13 16:07:59 2009
New Revision: 81716

URL: http://llvm.org/viewvc/llvm-project?rev=81716&view=rev
Log:
Storing a set of PATypeHolders is a bad idea because their sort order will
change as types are refined. Remove abstract types from CheckedTypes when they
we're informed that they have been refined. The only way types get refined in
the verifier is when later function passes start optimizing. Fixes PR4970.

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=81716&r1=81715&r2=81716&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/Verifier.cpp (original)
+++ llvm/trunk/lib/VMCore/Verifier.cpp Sun Sep 13 16:07:59 2009
@@ -107,7 +107,8 @@
 static const PassInfo *const PreVerifyID = &PreVer;
 
 namespace {
-  struct Verifier : public FunctionPass, public InstVisitor<Verifier> {
+  struct Verifier : public FunctionPass, public InstVisitor<Verifier>,
+                    public AbstractTypeUser {
     static char ID; // Pass ID, replacement for typeid
     bool Broken;          // Is this module found to be broken?
     bool RealPass;        // Are we not being run by a PassManager?
@@ -126,7 +127,7 @@
     SmallPtrSet<Instruction*, 16> InstsInThisBlock;
 
     /// CheckedTypes - keep track of the types that have been checked already.
-    SmallSet<PATypeHolder, 16> CheckedTypes;
+    SmallSet<const Type *, 16> CheckedTypes;
 
     Verifier()
       : FunctionPass(&ID), 
@@ -336,6 +337,13 @@
       WriteType(T3);
       Broken = true;
     }
+
+    // Abstract type user interface.
+    void refineAbstractType(const DerivedType *OldTy, const Type *NewTy) {
+      CheckedTypes.erase(OldTy);
+    }
+    void typeBecameConcrete(const DerivedType *AbsTy) {}
+    void dump() const {}
   };
 } // End anonymous namespace
 





More information about the llvm-commits mailing list