diff --git a/lib/VMCore/Globals.cpp b/lib/VMCore/Globals.cpp index 0e8227bdebc..e35d801f8a5 100644 --- a/lib/VMCore/Globals.cpp +++ b/lib/VMCore/Globals.cpp @@ -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(C)) return false; // Cannot remove this + + while (!C->use_empty()) if (Constant *User = dyn_cast(C->use_back())) { if (!removeDeadConstantUsers(User)) return false; // Constant wasn't dead } else { return false; // Non-constant usage; } - } - if (!isa(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