<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 9, 2014 at 5:45 PM, Duncan P. N. Exon Smith <span dir="ltr"><<a href="mailto:dexonsmith@apple.com" target="_blank">dexonsmith@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: dexonsmith<br>
Date: Tue Dec  9 19:45:04 2014<br>
New Revision: 223904<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=223904&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=223904&view=rev</a><br>
Log:<br>
IR: Move call to dropAllReferences() to MDNode subclasses<br>
<br>
Don't call `dropAllReferences()` from `MDNode::~MDNode()`, call it<br>
directly from `~MDNodeFwdDecl()` and `~GenericMDNode()`.<br></blockquote><div><br>What was the problem/how did this change address it? (seems unfortunate to have to duplicate things in subclasses, though I realize it's sometimes necessary - just not obvious to me what necessitates it in this instance)<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Modified:<br>
    llvm/trunk/include/llvm/IR/Metadata.h<br>
    llvm/trunk/lib/IR/Metadata.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/IR/Metadata.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Metadata.h?rev=223904&r1=223903&r2=223904&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Metadata.h?rev=223904&r1=223903&r2=223904&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/IR/Metadata.h (original)<br>
+++ llvm/trunk/include/llvm/IR/Metadata.h Tue Dec  9 19:45:04 2014<br>
@@ -598,7 +598,7 @@ protected:<br>
   }<br>
<br>
   MDNode(LLVMContext &Context, unsigned ID, ArrayRef<Metadata *> MDs);<br>
-  ~MDNode() { dropAllReferences(); }<br>
+  ~MDNode() {}<br>
<br>
   void dropAllReferences();<br>
   void storeDistinctInContext();<br>
@@ -766,7 +766,7 @@ class MDNodeFwdDecl : public MDNode, Rep<br>
<br>
   MDNodeFwdDecl(LLVMContext &C, ArrayRef<Metadata *> Vals)<br>
       : MDNode(C, MDNodeFwdDeclKind, Vals) {}<br>
-  ~MDNodeFwdDecl() {}<br>
+  ~MDNodeFwdDecl() { dropAllReferences(); }<br>
<br>
 public:<br>
   static bool classof(const Metadata *MD) {<br>
<br>
Modified: llvm/trunk/lib/IR/Metadata.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Metadata.cpp?rev=223904&r1=223903&r2=223904&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Metadata.cpp?rev=223904&r1=223903&r2=223904&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/IR/Metadata.cpp (original)<br>
+++ llvm/trunk/lib/IR/Metadata.cpp Tue Dec  9 19:45:04 2014<br>
@@ -428,6 +428,7 @@ GenericMDNode::~GenericMDNode() {<br>
     pImpl->NonUniquedMDNodes.erase(this);<br>
   else<br>
     pImpl->MDNodeSet.erase(this);<br>
+  dropAllReferences();<br>
 }<br>
<br>
 void GenericMDNode::resolve() {<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>