diff options
author | Devang Patel <dpatel@apple.com> | 2009-09-03 17:03:47 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2009-09-03 17:03:47 +0000 |
commit | 85dac4771f0acc48f1182108d175dc58bec9e521 (patch) | |
tree | e5a6ceaf879631b007c59b704af480b16d22297f /llvm/lib | |
parent | 728a81ab18dc0f41c1a76f7281863a077dff3618 (diff) | |
download | bcm5719-llvm-85dac4771f0acc48f1182108d175dc58bec9e521.tar.gz bcm5719-llvm-85dac4771f0acc48f1182108d175dc58bec9e521.zip |
Use WeakVH to hold dead mdnodes. Check use_empty() before deleting a node.
llvm-svn: 80928
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/VMCore/LLVMContext.cpp | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/llvm/lib/VMCore/LLVMContext.cpp b/llvm/lib/VMCore/LLVMContext.cpp index 0ed21fb754e..887679e08d3 100644 --- a/llvm/lib/VMCore/LLVMContext.cpp +++ b/llvm/lib/VMCore/LLVMContext.cpp @@ -17,6 +17,7 @@ #include "llvm/Constants.h" #include "llvm/Instruction.h" #include "llvm/Support/ManagedStatic.h" +#include "llvm/Support/ValueHandle.h" #include "LLVMContextImpl.h" #include <set> @@ -45,24 +46,25 @@ GetElementPtrConstantExpr::GetElementPtrConstantExpr } bool LLVMContext::RemoveDeadMetadata() { - std::vector<const MDNode *> DeadMDNodes; + std::vector<WeakVH> DeadMDNodes; bool Changed = false; while (1) { for (FoldingSet<MDNode>::iterator I = pImpl->MDNodeSet.begin(), E = pImpl->MDNodeSet.end(); I != E; ++I) { - const MDNode *N = &(*I); + MDNode *N = &(*I); if (N->use_empty()) - DeadMDNodes.push_back(N); + DeadMDNodes.push_back(WeakVH(N)); } if (DeadMDNodes.empty()) return Changed; while (!DeadMDNodes.empty()) { - const MDNode *N = DeadMDNodes.back(); DeadMDNodes.pop_back(); - delete N; + const MDNode *N = cast<MDNode>(DeadMDNodes.back()); DeadMDNodes.pop_back(); + if (N->use_empty()) + delete N; } } return Changed; |