diff --git a/llvm/include/llvm/IR/Metadata.h b/llvm/include/llvm/IR/Metadata.h index 6b202d88a96c..d06621df3aac 100644 --- a/llvm/include/llvm/IR/Metadata.h +++ b/llvm/include/llvm/IR/Metadata.h @@ -818,9 +818,11 @@ class MDNodeFwdDecl : public MDNode, ReplaceableMetadataImpl { MDNodeFwdDecl(LLVMContext &C, ArrayRef Vals) : MDNode(C, MDNodeFwdDeclKind, Vals) {} - ~MDNodeFwdDecl() { dropAllReferences(); } public: + ~MDNodeFwdDecl() { dropAllReferences(); } + using MDNode::operator delete; + static bool classof(const Metadata *MD) { return MD->getMetadataID() == MDNodeFwdDeclKind; } diff --git a/llvm/unittests/IR/MetadataTest.cpp b/llvm/unittests/IR/MetadataTest.cpp index ecda5e8820e7..c86fdd4f9233 100644 --- a/llvm/unittests/IR/MetadataTest.cpp +++ b/llvm/unittests/IR/MetadataTest.cpp @@ -129,6 +129,10 @@ TEST_F(MDNodeTest, Delete) { delete I; } +TEST_F(MDNodeTest, DeleteMDNodeFwdDecl) { + delete MDNode::getTemporary(Context, None); +} + TEST_F(MDNodeTest, SelfReference) { // !0 = !{!0} // !1 = !{!0}