From 930f475604bcd8835197df0dac0c63235f8f1bb3 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 9 Oct 2004 03:32:52 +0000 Subject: [PATCH] Fix infinite loop due to iteration git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16864 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/IPO/GlobalOpt.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp index dcbd87d5666..22ce82336fb 100644 --- a/lib/Transforms/IPO/GlobalOpt.cpp +++ b/lib/Transforms/IPO/GlobalOpt.cpp @@ -374,16 +374,22 @@ static bool ProcessInternalGlobal(GlobalVariable *GV, Module::giterator &GVI) { // Delete it now. if (!GS.isLoaded) { DEBUG(std::cerr << "GLOBAL NEVER LOADED: " << *GV); + unsigned NumUsers = GV->use_size(); + // Delete any stores we can find to the global. We may not be able to // make it completely dead though. CleanupConstantGlobalUsers(GV, GV->getInitializer()); + // Did we delete any stores? + bool Changed = NumUsers != GV->use_size(); + // If the global is dead now, delete it. if (GV->use_empty()) { GV->getParent()->getGlobalList().erase(GV); ++NumDeleted; + Changed = true; } - return true; + return Changed; } else if (GS.StoredType <= GlobalStatus::isInitializerStored) { DEBUG(std::cerr << "MARKING CONSTANT: " << *GV);