From ea50620eec9fb93d4b44228880186a806a52e503 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 8 Mar 2005 16:19:59 +0000 Subject: [PATCH] Make sure to remove all dead type names from the symbol table, not just struct types. This fixes Regression/CodeGen/CBackend/2005-03-08-RecursiveTypeCrash.ll, a crash on Java output that Alkis reported. llvm-svn: 20519 --- llvm/lib/Target/CBackend/Writer.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/llvm/lib/Target/CBackend/Writer.cpp b/llvm/lib/Target/CBackend/Writer.cpp index 57de4e5f770a..111468f02375 100644 --- a/llvm/lib/Target/CBackend/Writer.cpp +++ b/llvm/lib/Target/CBackend/Writer.cpp @@ -227,20 +227,19 @@ bool CBackendNameAllUsedStructs::runOnModule(Module &M) { std::set UT = getAnalysis().getTypes(); // Loop over the module symbol table, removing types from UT that are - // already named, and removing names for structure types that are not used. + // already named, and removing names for types that are not used. // SymbolTable &MST = M.getSymbolTable(); for (SymbolTable::type_iterator TI = MST.type_begin(), TE = MST.type_end(); TI != TE; ) { SymbolTable::type_iterator I = TI++; - if (const StructType *STy = dyn_cast(I->second)) { - // If this is not used, remove it from the symbol table. - std::set::iterator UTI = UT.find(STy); - if (UTI == UT.end()) - MST.remove(I); - else - UT.erase(UTI); - } + + // If this is not used, remove it from the symbol table. + std::set::iterator UTI = UT.find(I->second); + if (UTI == UT.end()) + MST.remove(I); + else + UT.erase(UTI); // Only keep one name for this type. } // UT now contains types that are not named. Loop over it, naming