diff options
author | Chris Lattner <sabre@nondot.org> | 2004-10-09 03:32:52 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-10-09 03:32:52 +0000 |
commit | 930f475604bcd8835197df0dac0c63235f8f1bb3 (patch) | |
tree | d620ab7605e61773b5a57f957e299fb311f7a92a /lib/Transforms/IPO | |
parent | a052f8297ab4b9bdc8b3ef5bd65b95b439c3cf56 (diff) | |
download | external_llvm-930f475604bcd8835197df0dac0c63235f8f1bb3.zip external_llvm-930f475604bcd8835197df0dac0c63235f8f1bb3.tar.gz external_llvm-930f475604bcd8835197df0dac0c63235f8f1bb3.tar.bz2 |
Fix infinite loop due to iteration
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16864 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/IPO')
-rw-r--r-- | lib/Transforms/IPO/GlobalOpt.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp index dcbd87d..22ce823 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); |