<div dir="ltr"><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Summary: In response to bug 24578, reported against failing LLVM test.<br>
<br></blockquote><div><br></div><div>FWIW we generally just say "PR24578"</div><div><br></div><div>So, hrm, how long do we expect the "workaround" annotation to be in the source?</div><div><br></div><div>-eric</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Reviewers: chandlerc, rsmith, eugenis<br>
<br>
Subscribers: llvm-commits<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D12335" rel="noreferrer" target="_blank">http://reviews.llvm.org/D12335</a><br>
<br>
Modified:<br>
    llvm/trunk/include/llvm/IR/User.h<br>
    llvm/trunk/include/llvm/Support/Compiler.h<br>
    llvm/trunk/lib/IR/Metadata.cpp<br>
    llvm/trunk/lib/IR/User.cpp<br>
<br>
Modified: llvm/trunk/include/llvm/IR/User.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/User.h?rev=246449&r1=246448&r2=246449&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/User.h?rev=246449&r1=246448&r2=246449&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/IR/User.h (original)<br>
+++ llvm/trunk/include/llvm/IR/User.h Mon Aug 31 10:57:40 2015<br>
@@ -72,8 +72,7 @@ protected:<br>
   void growHungoffUses(unsigned N, bool IsPhi = false);<br>
<br>
 public:<br>
-  ~User() override {<br>
-  }<br>
+  ~User() override {}<br>
   /// \brief Free memory allocated for User and Use objects.<br>
   void operator delete(void *Usr);<br>
   /// \brief Placement delete - required by std, but never called.<br>
<br>
Modified: llvm/trunk/include/llvm/Support/Compiler.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Compiler.h?rev=246449&r1=246448&r2=246449&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Compiler.h?rev=246449&r1=246448&r2=246449&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/include/llvm/Support/Compiler.h (original)<br>
+++ llvm/trunk/include/llvm/Support/Compiler.h Mon Aug 31 10:57:40 2015<br>
@@ -323,10 +323,12 @@<br>
 #if __has_feature(memory_sanitizer)<br>
 # define LLVM_MEMORY_SANITIZER_BUILD 1<br>
 # include <sanitizer/msan_interface.h><br>
+# define LLVM_NO_SANITIZE_MEMORY_ATTRIBUTE __attribute__((no_sanitize_memory))<br>
 #else<br>
 # define LLVM_MEMORY_SANITIZER_BUILD 0<br>
 # define __msan_allocated_memory(p, size)<br>
 # define __msan_unpoison(p, size)<br>
+# define LLVM_NO_SANITIZE_MEMORY_ATTRIBUTE<br>
 #endif<br>
<br>
 /// \macro LLVM_ADDRESS_SANITIZER_BUILD<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=246449&r1=246448&r2=246449&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Metadata.cpp?rev=246449&r1=246448&r2=246449&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/IR/Metadata.cpp (original)<br>
+++ llvm/trunk/lib/IR/Metadata.cpp Mon Aug 31 10:57:40 2015<br>
@@ -401,7 +401,9 @@ void *MDNode::operator new(size_t Size,<br>
   return Ptr;<br>
 }<br>
<br>
-void MDNode::operator delete(void *Mem) {<br>
+// Repress memory sanitization, due to use-after-destroy by operator<br>
+// delete. Bug report 24578 identifies this issue.<br>
+LLVM_NO_SANITIZE_MEMORY_ATTRIBUTE void MDNode::operator delete(void *Mem) {<br>
   MDNode *N = static_cast<MDNode *>(Mem);<br>
   size_t OpSize = N->NumOperands * sizeof(MDOperand);<br>
   OpSize = RoundUpToAlignment(OpSize, llvm::alignOf<uint64_t>());<br>
<br>
Modified: llvm/trunk/lib/IR/User.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/User.cpp?rev=246449&r1=246448&r2=246449&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/User.cpp?rev=246449&r1=246448&r2=246449&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/IR/User.cpp (original)<br>
+++ llvm/trunk/lib/IR/User.cpp Mon Aug 31 10:57:40 2015<br>
@@ -118,7 +118,9 @@ void *User::operator new(size_t Size) {<br>
 //                         User operator delete Implementation<br>
 //===----------------------------------------------------------------------===//<br>
<br>
-void User::operator delete(void *Usr) {<br>
+// Repress memory sanitization, due to use-after-destroy by operator<br>
+// delete. Bug report 24578 identifies this issue.<br>
+LLVM_NO_SANITIZE_MEMORY_ATTRIBUTE void User::operator delete(void *Usr) {<br>
   // Hung off uses use a single Use* before the User, while other subclasses<br>
   // use a Use[] allocated prior to the user.<br>
   User *Obj = static_cast<User *>(Usr);<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>