From d71cc4b518672d3b7a5d34e6bc62c3eab782c751 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 25 Jan 2002 03:56:34 +0000 Subject: 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 --- lib/VMCore/SymbolTable.cpp | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) (limited to 'lib/VMCore/SymbolTable.cpp') 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: "<getDescription()<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(NewType)->addAbstractTypeUser(this); + cast(NewType)->addAbstractTypeUser(this); + } } - } + } } -- cgit v1.2.3