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 | f369b38d55d2ad59714a7316b808b3ef0fe4a73b (patch) | |
| tree | 63ee25ba0057a24bfa1a44a245094aa020571311 /llvm/lib/Transforms | |
| parent | 4ad08352b42e2e55a7e2fa644c72aa54887e9705 (diff) | |
| download | bcm5719-llvm-f369b38d55d2ad59714a7316b808b3ef0fe4a73b.tar.gz bcm5719-llvm-f369b38d55d2ad59714a7316b808b3ef0fe4a73b.zip | |
Fix infinite loop due to iteration
llvm-svn: 16864
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/IPO/GlobalOpt.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/IPO/GlobalOpt.cpp b/llvm/lib/Transforms/IPO/GlobalOpt.cpp index dcbd87d5666..22ce82336fb 100644 --- a/llvm/lib/Transforms/IPO/GlobalOpt.cpp +++ b/llvm/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); |

