Fix another annoying bug that took forever to track down. This one involves abstract...
authorChris Lattner <sabre@nondot.org>
Tue, 23 Oct 2001 01:53:01 +0000 (01:53 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 23 Oct 2001 01:53:01 +0000 (01:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@958 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/SymbolTable.h
lib/Bytecode/Reader/ConstantReader.cpp

index 0a958fded7828edfcba588b405064d30af68af0f..c53cb785fa67bbae8b9d3fe0b6663bd1c50b469a 100644 (file)
@@ -55,10 +55,6 @@ public:
   // lookup - Returns null on failure...
   Value *lookup(const Type *Ty, const string &name);
 
-  // find - returns end(Ty->getIDNumber()) on failure...
-  type_iterator type_find(const Type *Ty, const string &name);
-  type_iterator type_find(const Value *D);
-
   // insert - Add named definition to the symbol table...
   inline void insert(Value *N) {
     assert(N->hasName() && "Value must be named to go into symbol table!");
@@ -76,7 +72,9 @@ public:
   }
 
   void remove(Value *N);
-  Value *type_remove(const type_iterator &It);
+  Value *type_remove(const type_iterator &It) {
+    return removeEntry(find(It->second->getType()), It);
+  }
 
   // getUniqueName - Given a base name, return a string that is either equal to
   // it (or derived from it) that does not already occur in the symbol table for
@@ -108,11 +106,20 @@ public:
   void dump() const;  // Debug method, print out symbol table
 
 private:
+  inline super::value_type operator[](const Type *Ty) {
+    assert(0 && "Should not use this operator to access symbol table!");
+    return super::value_type();
+  }
+
   // insertEntry - Insert a value into the symbol table with the specified
   // name...
   //
   void insertEntry(const string &Name, const Type *Ty, Value *V);
 
+  // removeEntry - Remove a value from the symbol table...
+  //
+  Value *removeEntry(iterator Plane, type_iterator Entry);
+
   // This function is called when one of the types in the type plane are refined
   virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy);
 };
index 6b69b361c1e9d8323aaa6a746af19f10ed73fee1..13f8747cb7dd484a9e75da2620f9fec88ed9cdc9 100644 (file)
@@ -87,6 +87,11 @@ const Type *BytecodeParser::parseTypeConstant(const uchar *&Buf,
     break;
   }
 
+  case Type::OpaqueTyID: {
+    Val = OpaqueType::get();
+    break;
+  }
+
   default:
     cerr << __FILE__ << ":" << __LINE__ << ": Don't know how to deserialize"
         << " primitive Type " << PrimType << "\n";