From 73b1ee857bb1022fbc72d983ef33a31b100013b9 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Thu, 3 Sep 2009 17:03:47 +0000 Subject: [PATCH] Use WeakVH to hold dead mdnodes. Check use_empty() before deleting a node. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80928 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/LLVMContext.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/VMCore/LLVMContext.cpp b/lib/VMCore/LLVMContext.cpp index 0ed21fb754e..887679e08d3 100644 --- a/lib/VMCore/LLVMContext.cpp +++ b/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 @@ -45,24 +46,25 @@ GetElementPtrConstantExpr::GetElementPtrConstantExpr } bool LLVMContext::RemoveDeadMetadata() { - std::vector DeadMDNodes; + std::vector DeadMDNodes; bool Changed = false; while (1) { for (FoldingSet::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(DeadMDNodes.back()); DeadMDNodes.pop_back(); + if (N->use_empty()) + delete N; } } return Changed; -- 2.11.0