Fix infinite loop gccld'ing povray
authorChris Lattner <sabre@nondot.org>
Sun, 18 Jul 2004 08:12:57 +0000 (08:12 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 18 Jul 2004 08:12:57 +0000 (08:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14962 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Globals.cpp

index 0e8227bdebc29f2345808749d20ce152c7f045ee..e35d801f8a555883ac3fdb7ee795bfd0c4baae5a 100644 (file)
@@ -17,7 +17,6 @@
 #include "llvm/Module.h"
 #include "llvm/SymbolTable.h"
 #include "Support/LeakDetector.h"
-
 using namespace llvm;
 
 //===----------------------------------------------------------------------===//
@@ -28,21 +27,20 @@ using namespace llvm;
 /// there are no non-constant uses of this GlobalValue. If there aren't then
 /// this and the transitive closure of the constants can be deleted. See the
 /// destructor for details.
-namespace {
-bool removeDeadConstantUsers(Constant* C) {
-  while (!C->use_empty()) {
+static bool removeDeadConstantUsers(Constant* C) {
+  if (isa<GlobalValue>(C)) return false; // Cannot remove this
+
+  while (!C->use_empty())
     if (Constant *User = dyn_cast<Constant>(C->use_back())) {
       if (!removeDeadConstantUsers(User)) 
         return false; // Constant wasn't dead
     } else {
       return false; // Non-constant usage;
     }
-  }
-  if (!isa<GlobalValue>(C))
-    C->destroyConstant();
+
+  C->destroyConstant();
   return true;
 }
-}
 
 /// removeDeadConstantUsers - If there are any dead constant users dangling
 /// off of this global value, remove them.  This method is useful for clients