<div dir="ltr">Feel free to land. I don't think I was taking about <a href="https://reviews.llvm.org/D23875" rel="noreferrer" class="gmail_msg inbox-inbox-cremed cremed" target="_blank" style="font-family:"helvetica neue",helvetica,arial,sans-serif">D23875</a>. </div><br><div class="gmail_quote"><div dir="ltr">On Tue, Sep 13, 2016 at 7:48 AM Filipe Cabecinhas <<a href="mailto:filcab%2Bllvm.phabricator@gmail.com">filcab+llvm.phabricator@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">filcab updated this revision to Diff 71170.<br class="gmail_msg">
filcab added a comment.<br class="gmail_msg">
<br class="gmail_msg">
Updating after <a href="https://reviews.llvm.org/D23875" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D23875</a> (consistency on constructor args and member order)<br class="gmail_msg">
<br class="gmail_msg">
Vitaly: I know you approved most of these, but you also said we should revisit them after <a href="https://reviews.llvm.org/D23875" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D23875</a> lands. Let me know if they're ok to commit or if you still want changes.<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<a href="https://reviews.llvm.org/D24392" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D24392</a><br class="gmail_msg">
<br class="gmail_msg">
Files:<br class="gmail_msg">
  lib/asan/asan_errors.cc<br class="gmail_msg">
  lib/asan/asan_errors.h<br class="gmail_msg">
  lib/asan/asan_report.cc<br class="gmail_msg">
<br class="gmail_msg">
Index: lib/asan/asan_report.cc<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/asan/asan_report.cc<br class="gmail_msg">
+++ lib/asan/asan_report.cc<br class="gmail_msg">
@@ -372,15 +372,9 @@<br class="gmail_msg">
 void ReportSanitizerGetAllocatedSizeNotOwned(uptr addr,<br class="gmail_msg">
                                              BufferedStackTrace *stack) {<br class="gmail_msg">
   ScopedInErrorReport in_report;<br class="gmail_msg">
-  Decorator d;<br class="gmail_msg">
-  Printf("%s", d.Warning());<br class="gmail_msg">
-  Report("ERROR: AddressSanitizer: attempting to call "<br class="gmail_msg">
-             "__sanitizer_get_allocated_size() for pointer which is "<br class="gmail_msg">
-             "not owned: %p\n", addr);<br class="gmail_msg">
-  Printf("%s", d.EndWarning());<br class="gmail_msg">
-  stack->Print();<br class="gmail_msg">
-  DescribeAddressIfHeap(addr);<br class="gmail_msg">
-  ReportErrorSummary("bad-__sanitizer_get_allocated_size", stack);<br class="gmail_msg">
+  ErrorSanitizerGetAllocatedSizeNotOwned error(GetCurrentTidOrInvalid(), stack,<br class="gmail_msg">
+                                               addr);<br class="gmail_msg">
+  in_report.ReportError(error);<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
 void ReportStringFunctionMemoryRangesOverlap(const char *function,<br class="gmail_msg">
Index: lib/asan/asan_errors.h<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/asan/asan_errors.h<br class="gmail_msg">
+++ lib/asan/asan_errors.h<br class="gmail_msg">
@@ -176,15 +176,33 @@<br class="gmail_msg">
   void Print();<br class="gmail_msg">
 };<br class="gmail_msg">
<br class="gmail_msg">
+struct ErrorSanitizerGetAllocatedSizeNotOwned : ErrorBase {<br class="gmail_msg">
+  // ErrorSanitizerGetAllocatedSizeNotOwned doesn't own the stack trace.<br class="gmail_msg">
+  const BufferedStackTrace *stack;<br class="gmail_msg">
+  AddressDescription addr_description;<br class="gmail_msg">
+  // VS2013 doesn't implement unrestricted unions, so we need a trivial default<br class="gmail_msg">
+  // constructor<br class="gmail_msg">
+  ErrorSanitizerGetAllocatedSizeNotOwned() = default;<br class="gmail_msg">
+  ErrorSanitizerGetAllocatedSizeNotOwned(u32 tid, BufferedStackTrace *stack_,<br class="gmail_msg">
+                                         uptr addr)<br class="gmail_msg">
+      : ErrorBase(tid),<br class="gmail_msg">
+        stack(stack_),<br class="gmail_msg">
+        addr_description(addr, /*shouldLockThreadRegistry=*/false) {<br class="gmail_msg">
+    scariness.Clear();<br class="gmail_msg">
+  }<br class="gmail_msg">
+  void Print();<br class="gmail_msg">
+};<br class="gmail_msg">
+<br class="gmail_msg">
 // clang-format off<br class="gmail_msg">
 #define ASAN_FOR_EACH_ERROR_KIND(macro) \<br class="gmail_msg">
   macro(StackOverflow)                  \<br class="gmail_msg">
   macro(DeadlySignal)                   \<br class="gmail_msg">
   macro(DoubleFree)                     \<br class="gmail_msg">
   macro(NewDeleteSizeMismatch)          \<br class="gmail_msg">
   macro(FreeNotMalloced)                \<br class="gmail_msg">
   macro(AllocTypeMismatch)              \<br class="gmail_msg">
-  macro(MallocUsableSizeNotOwned)<br class="gmail_msg">
+  macro(MallocUsableSizeNotOwned)       \<br class="gmail_msg">
+  macro(SanitizerGetAllocatedSizeNotOwned)<br class="gmail_msg">
 // clang-format on<br class="gmail_msg">
<br class="gmail_msg">
 #define ASAN_DEFINE_ERROR_KIND(name) kErrorKind##name,<br class="gmail_msg">
Index: lib/asan/asan_errors.cc<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/asan/asan_errors.cc<br class="gmail_msg">
+++ lib/asan/asan_errors.cc<br class="gmail_msg">
@@ -177,4 +177,17 @@<br class="gmail_msg">
   ReportErrorSummary("bad-malloc_usable_size", stack);<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
+void ErrorSanitizerGetAllocatedSizeNotOwned::Print() {<br class="gmail_msg">
+  Decorator d;<br class="gmail_msg">
+  Printf("%s", d.Warning());<br class="gmail_msg">
+  Report(<br class="gmail_msg">
+      "ERROR: AddressSanitizer: attempting to call "<br class="gmail_msg">
+      "__sanitizer_get_allocated_size() for pointer which is not owned: %p\n",<br class="gmail_msg">
+      addr_description.Address());<br class="gmail_msg">
+  Printf("%s", d.EndWarning());<br class="gmail_msg">
+  stack->Print();<br class="gmail_msg">
+  addr_description.Print();<br class="gmail_msg">
+  ReportErrorSummary("bad-__sanitizer_get_allocated_size", stack);<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
 }  // namespace __asan<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div>