diff --git a/lib/VMCore/LLVMContextImpl.h b/lib/VMCore/LLVMContextImpl.h index fda56083b06..3d1f3b26a5c 100644 --- a/lib/VMCore/LLVMContextImpl.h +++ b/lib/VMCore/LLVMContextImpl.h @@ -105,7 +105,7 @@ struct LLVMContextImpl { ValueMap AggZeroConstants; - ValueMap, Type, MDNode> MDNodes; + ValueMap, Type, MDNode, true /*largekey*/> MDNodes; typedef ValueMap, ArrayType, ConstantArray, true /*largekey*/> ArrayConstantsTy; diff --git a/lib/VMCore/Metadata.cpp b/lib/VMCore/Metadata.cpp index 1680572ab93..3a61d0eefb7 100644 --- a/lib/VMCore/Metadata.cpp +++ b/lib/VMCore/Metadata.cpp @@ -92,8 +92,17 @@ void MDNode::dropAllReferences() { Node.clear(); } +static std::vector getValType(MDNode *N) { + std::vector Elements; + Elements.reserve(N->getNumElements()); + for (unsigned i = 0, e = N->getNumElements(); i != e; ++i) + Elements.push_back(N->getElement(i)); + return Elements; +} + MDNode::~MDNode() { dropAllReferences(); + getType()->getContext().pImpl->MDNodes.remove(this); } //===----------------------------------------------------------------------===// //NamedMDNode implementation