diff options
author | Chris Lattner <sabre@nondot.org> | 2002-01-25 03:56:34 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-01-25 03:56:34 +0000 |
commit | d71cc4b518672d3b7a5d34e6bc62c3eab782c751 (patch) | |
tree | c8fe54c7488050a53739608fa93824232a2c7dd0 /lib/VMCore/SymbolTable.cpp | |
parent | 02d429d1dba1c990cdbda3dd69eba2a0f5cb8a4a (diff) |
This checkin fixes the bug described in:
test/Regression/Assembler/2002-01-24-BadSymbolTableAssert.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1583 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/SymbolTable.cpp')
-rw-r--r-- | lib/VMCore/SymbolTable.cpp | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/lib/VMCore/SymbolTable.cpp b/lib/VMCore/SymbolTable.cpp index ab98a73184..ab15eb6eec 100644 --- a/lib/VMCore/SymbolTable.cpp +++ b/lib/VMCore/SymbolTable.cpp @@ -208,8 +208,8 @@ void SymbolTable::refineAbstractType(const DerivedType *OldType, #if DEBUG_ABSTYPE cerr << "[Added] refined to abstype: "<<NewType->getDescription()<<endl; #endif + } } - } VarMap &NewPlane = NewTypeIt->second; VarMap &OldPlane = TPI->second; @@ -283,29 +283,29 @@ void SymbolTable::refineAbstractType(const DerivedType *OldType, } TPI = find(Type::TypeTy); - assert(TPI != end() &&"Type plane not in symbol table but we contain types!"); - - // Loop over all of the types in the symbol table, replacing any references to - // OldType with references to NewType. Note that there may be multiple - // occurances, and although we only need to remove one at a time, it's faster - // to remove them all in one pass. - // - VarMap &TyPlane = TPI->second; - for (VarMap::iterator I = TyPlane.begin(), E = TyPlane.end(); I != E; ++I) - if (I->second == (Value*)OldType) { // FIXME when Types aren't const. + if (TPI != end()) { + // Loop over all of the types in the symbol table, replacing any references to + // OldType with references to NewType. Note that there may be multiple + // occurances, and although we only need to remove one at a time, it's faster + // to remove them all in one pass. + // + VarMap &TyPlane = TPI->second; + for (VarMap::iterator I = TyPlane.begin(), E = TyPlane.end(); I != E; ++I) + if (I->second == (Value*)OldType) { // FIXME when Types aren't const. #if DEBUG_ABSTYPE - cerr << "Removing type " << OldType->getDescription() << endl; + cerr << "Removing type " << OldType->getDescription() << endl; #endif - OldType->removeAbstractTypeUser(this); - - I->second = (Value*)NewType; // TODO FIXME when types aren't const - if (NewType->isAbstract()) { + OldType->removeAbstractTypeUser(this); + + I->second = (Value*)NewType; // TODO FIXME when types aren't const + if (NewType->isAbstract()) { #if DEBUG_ABSTYPE - cerr << "Added type " << NewType->getDescription() << endl; + cerr << "Added type " << NewType->getDescription() << endl; #endif - cast<const DerivedType>(NewType)->addAbstractTypeUser(this); + cast<const DerivedType>(NewType)->addAbstractTypeUser(this); + } } - } + } } |