<p dir="ltr">I think the last print call has to be 4-byte aligned. Could you try replacing the string with an int or something like that? I don't have a dev machine nearby.</p>
<div class="gmail_quote">On May 2, 2014 10:29 PM, "David Blaikie" <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Wed, Apr 30, 2014 at 2:29 PM, Alexey Samsonov <<a href="mailto:samsonov@google.com">samsonov@google.com</a>> wrote:<br>
> I see the following test failure locally:<br>
><br>
> llvm/projects/compiler-rt/test/msan/msan_print_shadow2.cc:48:22: error:<br>
> expected string not found in input<br>
> // CHECK-NO-ORIGINS: 0x{{.*}}: 000000.. ........ ........ ........<br>
>                      ^<br>
> <stdin>:16:1: note: scanning from here<br>
> 0x3f8e8a279e44: ....0000 00...... ........ ........<br>
> ^<br>
> <stdin>:16:14: note: possible intended match here<br>
> 0x3f8e8a279e44: ....0000 00...... ........ ........<br>
>              ^<br>
<br>
Bump. I see this failure locally too.<br>
<br>
projects/compiler-rt/test/msan/msan_print_shadow2.cc:48:22: error:<br>
expected string not found in input<br>
// CHECK-NO-ORIGINS: 0x{{.*}}: 000000.. ........ ........ ........<br>
                     ^<br>
<stdin>:16:1: note: scanning from here<br>
0x3fafc42415d4: ....0000 00...... ........ ........<br>
^<br>
<stdin>:16:14: note: possible intended match here<br>
0x3fafc42415d4: ....0000 00...... ........ ........<br>
<br>
><br>
><br>
><br>
> On Wed, Apr 30, 2014 at 2:50 AM, Evgeniy Stepanov<br>
> <<a href="mailto:eugeni.stepanov@gmail.com">eugeni.stepanov@gmail.com</a>> wrote:<br>
>><br>
>> Author: eugenis<br>
>> Date: Wed Apr 30 04:50:30 2014<br>
>> New Revision: 207622<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=207622&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=207622&view=rev</a><br>
>> Log:<br>
>> [msan] Prettify __msan_print_shadow.<br>
>><br>
>> Makes __msan_print_shadow output much more readable, adds origin info.<br>
>><br>
>> Added:<br>
>>     compiler-rt/trunk/test/msan/msan_dump_shadow.cc   (with props)<br>
>>     compiler-rt/trunk/test/msan/msan_print_shadow.cc   (with props)<br>
>>     compiler-rt/trunk/test/msan/msan_print_shadow2.cc   (with props)<br>
>> Modified:<br>
>>     compiler-rt/trunk/include/sanitizer/msan_interface.h<br>
>>     compiler-rt/trunk/lib/msan/msan.cc<br>
>>     compiler-rt/trunk/lib/msan/msan.h<br>
>>     compiler-rt/trunk/lib/msan/msan_interface_internal.h<br>
>>     compiler-rt/trunk/lib/msan/msan_report.cc<br>
>><br>
>> Modified: compiler-rt/trunk/include/sanitizer/msan_interface.h<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/include/sanitizer/msan_interface.h?rev=207622&r1=207621&r2=207622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/include/sanitizer/msan_interface.h?rev=207622&r1=207621&r2=207622&view=diff</a><br>

>><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/include/sanitizer/msan_interface.h (original)<br>
>> +++ compiler-rt/trunk/include/sanitizer/msan_interface.h Wed Apr 30<br>
>> 04:50:30 2014<br>
>> @@ -78,6 +78,10 @@ extern "C" {<br>
>>       format. */<br>
>>    void __msan_print_shadow(const volatile void *x, size_t size);<br>
>><br>
>> +  /* Print shadow for the memory range to stderr in a minimalistic<br>
>> +     human-readable format. */<br>
>> +  void __msan_dump_shadow(const volatile void *x, size_t size);<br>
>> +<br>
>>    /* Returns true if running under a dynamic tool (DynamoRio-based). */<br>
>>    int  __msan_has_dynamic_component();<br>
>><br>
>><br>
>> Modified: compiler-rt/trunk/lib/msan/msan.cc<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.cc?rev=207622&r1=207621&r2=207622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.cc?rev=207622&r1=207621&r2=207622&view=diff</a><br>

>><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/lib/msan/msan.cc (original)<br>
>> +++ compiler-rt/trunk/lib/msan/msan.cc Wed Apr 30 04:50:30 2014<br>
>> @@ -383,18 +383,21 @@ void __msan_print_shadow(const void *x,<br>
>>      Printf("Not a valid application address: %p\n", x);<br>
>>      return;<br>
>>    }<br>
>> +<br>
>> +  DescribeMemoryRange(x, size);<br>
>> +}<br>
>> +<br>
>> +void __msan_dump_shadow(const void *x, uptr size) {<br>
>> +  if (!MEM_IS_APP(x)) {<br>
>> +    Printf("Not a valid application address: %p\n", x);<br>
>> +    return;<br>
>> +  }<br>
>> +<br>
>>    unsigned char *s = (unsigned char*)MEM_TO_SHADOW(x);<br>
>> -  u32 *o = (u32*)MEM_TO_ORIGIN(x);<br>
>>    for (uptr i = 0; i < size; i++) {<br>
>>      Printf("%x%x ", s[i] >> 4, s[i] & 0xf);<br>
>>    }<br>
>>    Printf("\n");<br>
>> -  if (__msan_get_track_origins()) {<br>
>> -    for (uptr i = 0; i < size / 4; i++) {<br>
>> -      Printf(" o: %x ", o[i]);<br>
>> -    }<br>
>> -    Printf("\n");<br>
>> -  }<br>
>>  }<br>
>><br>
>>  sptr __msan_test_shadow(const void *x, uptr size) {<br>
>><br>
>> Modified: compiler-rt/trunk/lib/msan/msan.h<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.h?rev=207622&r1=207621&r2=207622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan.h?rev=207622&r1=207621&r2=207622&view=diff</a><br>

>><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/lib/msan/msan.h (original)<br>
>> +++ compiler-rt/trunk/lib/msan/msan.h Wed Apr 30 04:50:30 2014<br>
>> @@ -83,6 +83,7 @@ void GetStackTrace(StackTrace *stack, up<br>
>>  void ReportUMR(StackTrace *stack, u32 origin);<br>
>>  void ReportExpectedUMRNotFound(StackTrace *stack);<br>
>>  void ReportAtExitStatistics();<br>
>> +void DescribeMemoryRange(const void *x, uptr size);<br>
>><br>
>>  // Unpoison first n function arguments.<br>
>>  void UnpoisonParam(uptr n);<br>
>><br>
>> Modified: compiler-rt/trunk/lib/msan/msan_interface_internal.h<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_interface_internal.h?rev=207622&r1=207621&r2=207622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_interface_internal.h?rev=207622&r1=207621&r2=207622&view=diff</a><br>

>><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/lib/msan/msan_interface_internal.h (original)<br>
>> +++ compiler-rt/trunk/lib/msan/msan_interface_internal.h Wed Apr 30<br>
>> 04:50:30 2014<br>
>> @@ -118,6 +118,8 @@ void __msan_set_expect_umr(int expect_um<br>
>>  SANITIZER_INTERFACE_ATTRIBUTE<br>
>>  void __msan_print_shadow(const void *x, uptr size);<br>
>>  SANITIZER_INTERFACE_ATTRIBUTE<br>
>> +void __msan_dump_shadow(const void *x, uptr size);<br>
>> +SANITIZER_INTERFACE_ATTRIBUTE<br>
>>  int  __msan_has_dynamic_component();<br>
>><br>
>>  // Returns x such that %fs:x is the first byte of __msan_retval_tls.<br>
>><br>
>> Modified: compiler-rt/trunk/lib/msan/msan_report.cc<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_report.cc?rev=207622&r1=207621&r2=207622&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/msan_report.cc?rev=207622&r1=207621&r2=207622&view=diff</a><br>

>><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/lib/msan/msan_report.cc (original)<br>
>> +++ compiler-rt/trunk/lib/msan/msan_report.cc Wed Apr 30 04:50:30 2014<br>
>> @@ -124,4 +124,115 @@ void ReportAtExitStatistics() {<br>
>>    Printf("Stack depot mapped bytes: %zu\n", stack_depot_stats->mapped);<br>
>>  }<br>
>><br>
>> +class OriginSet {<br>
>> + public:<br>
>> +  OriginSet() : next_id_(0) {}<br>
>> +  int insert(u32 o) {<br>
>> +    // Scan from the end for better locality.<br>
>> +    for (int i = next_id_ - 1; i >= 0; --i)<br>
>> +      if (origins_[i] == o) return i;<br>
>> +    if (next_id_ == kMaxSize_) return OVERFLOW;<br>
>> +    int id = next_id_++;<br>
>> +    origins_[id] = o;<br>
>> +    return id;<br>
>> +  }<br>
>> +  int size() { return next_id_; }<br>
>> +  u32 get(int id) { return origins_[id]; }<br>
>> +  static char asChar(int id) {<br>
>> +    switch (id) {<br>
>> +      case MISSING:<br>
>> +        return '.';<br>
>> +      case OVERFLOW:<br>
>> +        return '*';<br>
>> +      default:<br>
>> +        return 'A' + id;<br>
>> +    }<br>
>> +  }<br>
>> +  static const int OVERFLOW = -1;<br>
>> +  static const int MISSING = -2;<br>
>> +<br>
>> + private:<br>
>> +  static const int kMaxSize_ = 'Z' - 'A' + 1;<br>
>> +  u32 origins_[kMaxSize_];<br>
>> +  int next_id_;<br>
>> +};<br>
>> +<br>
>> +void DescribeMemoryRange(const void *x, uptr size) {<br>
>> +  // Real limits.<br>
>> +  uptr start = MEM_TO_SHADOW(x);<br>
>> +  uptr end = start + size;<br>
>> +  // Scan limits: align start down to 4; align size up to 16.<br>
>> +  uptr s = start & ~3UL;<br>
>> +  size = end - s;<br>
>> +  size = (size + 15) & ~15UL;<br>
>> +  uptr e = s + size;<br>
>> +<br>
>> +  // Single letter names to origin id mapping.<br>
>> +  OriginSet origin_set;<br>
>> +<br>
>> +  uptr pos = 0;  // Offset from aligned start.<br>
>> +  bool with_origins = __msan_get_track_origins();<br>
>> +  // True if there is at least 1 poisoned bit in the last 4-byte group.<br>
>> +  bool last_quad_poisoned;<br>
>> +  int origin_ids[4];  // Single letter origin ids for the current line.<br>
>> +<br>
>> +  Decorator d;<br>
>> +  Printf("%s", d.Warning());<br>
>> +  Printf("Shadow map of [%p, %p), %zu bytes:\n", start, end, end -<br>
>> start);<br>
>> +  Printf("%s", d.End());<br>
>> +  while (s < e) {<br>
>> +    // Line start.<br>
>> +    if (pos % 16 == 0) {<br>
>> +      for (int i = 0; i < 4; ++i) origin_ids[i] = -1;<br>
>> +      Printf("%p:", s);<br>
>> +    }<br>
>> +    // Group start.<br>
>> +    if (pos % 4 == 0) {<br>
>> +      Printf(" ");<br>
>> +      last_quad_poisoned = false;<br>
>> +    }<br>
>> +    // Print shadow byte.<br>
>> +    if (s < start || s >= end) {<br>
>> +      Printf("..");<br>
>> +    } else {<br>
>> +      unsigned char v = *(unsigned char *)s;<br>
>> +      if (v) last_quad_poisoned = true;<br>
>> +      Printf("%02x", v);<br>
>> +    }<br>
>> +    // Group end.<br>
>> +    if (pos % 4 == 3 && with_origins) {<br>
>> +      int id = OriginSet::MISSING;<br>
>> +      if (last_quad_poisoned) {<br>
>> +        u32 o = *(u32 *)SHADOW_TO_ORIGIN(s - 3);<br>
>> +        id = origin_set.insert(o);<br>
>> +      }<br>
>> +      origin_ids[(pos % 16) / 4] = id;<br>
>> +    }<br>
>> +    // Line end.<br>
>> +    if (pos % 16 == 15) {<br>
>> +      if (with_origins) {<br>
>> +        Printf("  |");<br>
>> +        for (int i = 0; i < 4; ++i) {<br>
>> +          char c = OriginSet::asChar(origin_ids[i]);<br>
>> +          Printf("%c", c);<br>
>> +          if (i != 3) Printf(" ");<br>
>> +        }<br>
>> +        Printf("|");<br>
>> +      }<br>
>> +      Printf("\n");<br>
>> +    }<br>
>> +    size--;<br>
>> +    s++;<br>
>> +    pos++;<br>
>> +  }<br>
>> +<br>
>> +  Printf("\n");<br>
>> +<br>
>> +  for (int i = 0; i < origin_set.size(); ++i) {<br>
>> +    u32 o = origin_set.get(i);<br>
>> +    Printf("Origin %c (origin_id %x):\n", OriginSet::asChar(i), o);<br>
>> +    DescribeOrigin(o);<br>
>> +  }<br>
>> +}<br>
>> +<br>
>>  }  // namespace __msan<br>
>><br>
>> Added: compiler-rt/trunk/test/msan/msan_dump_shadow.cc<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/msan/msan_dump_shadow.cc?rev=207622&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/msan/msan_dump_shadow.cc?rev=207622&view=auto</a><br>

>><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/test/msan/msan_dump_shadow.cc (added)<br>
>> +++ compiler-rt/trunk/test/msan/msan_dump_shadow.cc Wed Apr 30 04:50:30<br>
>> 2014<br>
>> @@ -0,0 +1,22 @@<br>
>> +// RUN: %clangxx_msan -m64 -O0 -g %s -o %t && %t >%t.out 2>&1<br>
>> +// RUN: FileCheck %s < %t.out<br>
>> +<br>
>> +// RUN: %clangxx_msan -fsanitize-memory-track-origins -m64 -O0 -g %s -o<br>
>> %t && %t >%t.out 2>&1<br>
>> +// RUN: FileCheck %s < %t.out<br>
>> +<br>
>> +// RUN: %clangxx_msan -fsanitize-memory-track-origins=2 -m64 -O0 -g %s -o<br>
>> %t && %t >%t.out 2>&1<br>
>> +// RUN: FileCheck %s < %t.out<br>
>> +<br>
>> +#include <sanitizer/msan_interface.h><br>
>> +<br>
>> +int main(void) {<br>
>> +  char *p = new char[16];<br>
>> +  __msan_dump_shadow(p, 5);<br>
>> +  delete[] p;<br>
>> +  const char *q = "abc";<br>
>> +  __msan_dump_shadow(q, 3);<br>
>> +  return 0;<br>
>> +}<br>
>> +<br>
>> +// CHECK: ff ff ff ff ff<br>
>> +// CHECK: 00 00 00<br>
>><br>
>> Propchange: compiler-rt/trunk/test/msan/msan_dump_shadow.cc<br>
>><br>
>> ------------------------------------------------------------------------------<br>
>>     svn:eol-style = LF<br>
>><br>
>> Added: compiler-rt/trunk/test/msan/msan_print_shadow.cc<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/msan/msan_print_shadow.cc?rev=207622&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/msan/msan_print_shadow.cc?rev=207622&view=auto</a><br>

>><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/test/msan/msan_print_shadow.cc (added)<br>
>> +++ compiler-rt/trunk/test/msan/msan_print_shadow.cc Wed Apr 30 04:50:30<br>
>> 2014<br>
>> @@ -0,0 +1,122 @@<br>
>> +// RUN: %clangxx_msan -m64 -O0 -g %s -o %t && %t >%t.out 2>&1<br>
>> +// RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NO-ORIGINS<br>
>> < %t.out<br>
>> +<br>
>> +// RUN: %clangxx_msan -fsanitize-memory-track-origins -m64 -O0 -g %s -o<br>
>> %t && %t >%t.out 2>&1<br>
>> +// RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-ORIGINS <<br>
>> %t.out<br>
>> +<br>
>> +// RUN: %clangxx_msan -fsanitize-memory-track-origins=2 -m64 -O0 -g %s -o<br>
>> %t && %t >%t.out 2>&1<br>
>> +// RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-ORIGINS<br>
>> --check-prefix=CHECK-ORIGINS-2 < %t.out<br>
>> +<br>
>> +#include <sanitizer/msan_interface.h><br>
>> +<br>
>> +int main(void) {<br>
>> +  char volatile x;<br>
>> +  char *p = new char[320];<br>
>> +  p[2] = p[5] = 1;<br>
>> +  p[8] = p[9] = p[10] = p[11] = p[12] = 2;<br>
>> +<br>
>> +  __msan_allocated_memory(p + 4*3, 4);<br>
>> +  __msan_allocated_memory(p + 4*4, 4);<br>
>> +  __msan_allocated_memory(p + 4*5, 4);<br>
>> +  __msan_allocated_memory(p + 4*6, 4);<br>
>> +  __msan_allocated_memory(p + 4*7, 4);<br>
>> +  __msan_allocated_memory(p + 4*8, 4);<br>
>> +  __msan_allocated_memory(p + 4*9, 4);<br>
>> +  __msan_allocated_memory(p + 4*10, 4);<br>
>> +  __msan_allocated_memory(p + 4*11, 4);<br>
>> +  __msan_allocated_memory(p + 4*12, 4);<br>
>> +  __msan_allocated_memory(p + 4*13, 4);<br>
>> +  __msan_allocated_memory(p + 4*14, 4);<br>
>> +  __msan_allocated_memory(p + 4*15, 4);<br>
>> +  __msan_allocated_memory(p + 4*16, 4);<br>
>> +  __msan_allocated_memory(p + 4*17, 4);<br>
>> +  __msan_allocated_memory(p + 4*18, 4);<br>
>> +  __msan_allocated_memory(p + 4*19, 4);<br>
>> +  __msan_allocated_memory(p + 4*20, 4);<br>
>> +  __msan_allocated_memory(p + 4*21, 4);<br>
>> +  __msan_allocated_memory(p + 4*22, 4);<br>
>> +  __msan_allocated_memory(p + 4*23, 4);<br>
>> +  __msan_allocated_memory(p + 4*24, 4);<br>
>> +  __msan_allocated_memory(p + 4*25, 4);<br>
>> +  __msan_allocated_memory(p + 4*26, 4);<br>
>> +  __msan_allocated_memory(p + 4*27, 4);<br>
>> +  __msan_allocated_memory(p + 4*28, 4);<br>
>> +  __msan_allocated_memory(p + 4*29, 4);<br>
>> +  __msan_allocated_memory(p + 4*30, 4);<br>
>> +  __msan_allocated_memory(p + 4*31, 4);<br>
>> +<br>
>> +  p[19] = x;<br>
>> +<br>
>> +  __msan_print_shadow(p+5, 297);<br>
>> +  delete[] p;<br>
>> +  return 0;<br>
>> +}<br>
>> +<br>
>> +// CHECK: Shadow map of [{{.*}}), 297 bytes:<br>
>> +<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ..00ffff 00000000 ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff<br>
>> +// CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffff.... ........<br>
>> +<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ..00ffff 00000000 ffffffff ffffffff  |A . B<br>
>> C|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |D E F<br>
>> G|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |H I J<br>
>> K|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |L M N<br>
>> O|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |P Q R<br>
>> S|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |T U V<br>
>> W|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |X Y Z<br>
>> *|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |* * *<br>
>> A|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A<br>
>> A|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A<br>
>> A|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A<br>
>> A|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A<br>
>> A|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A<br>
>> A|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A<br>
>> A|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A<br>
>> A|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A<br>
>> A|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A<br>
>> A|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A<br>
>> A|<br>
>> +// CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffff.... ........  |A A A<br>
>> .|<br>
>> +<br>
>> +// CHECK-ORIGINS: Origin A (origin_id {{.*}}):<br>
>> +// CHECK-ORIGINS:   Uninitialized value was created by a heap allocation<br>
>> +// CHECK-ORIGINS:     #1 {{.*}} in main{{.*}}msan_print_shadow.cc:14<br>
>> +<br>
>> +// CHECK-ORIGINS: Origin B (origin_id {{.*}}):<br>
>> +// CHECK-ORIGINS:   Uninitialized value was created by a heap allocation<br>
>> +// CHECK-ORIGINS:     #0 {{.*}} in __msan_allocated_memory<br>
>> +// CHECK-ORIGINS:     #1 {{.*}} in main{{.*}}msan_print_shadow.cc:18<br>
>> +<br>
>> +// CHECK-ORIGINS: Origin C (origin_id {{.*}}):<br>
>> +// CHECK-ORIGINS-2:  Uninitialized value was stored to memory at<br>
>> +// CHECK-ORIGINS-2:    #0 {{.*}} in main{{.*}}msan_print_shadow.cc:48<br>
>> +// CHECK-ORIGINS:   Uninitialized value was created by an allocation of<br>
>> 'x' in the stack frame of function 'main'<br>
>> +// CHECK-ORIGINS:     #0 {{.*}} in main{{.*}}msan_print_shadow.cc:12<br>
>> +<br>
>> +// CHECK-ORIGINS: Origin D (origin_id {{.*}}):<br>
>> +// CHECK-ORIGINS:   Uninitialized value was created by a heap allocation<br>
>> +// CHECK-ORIGINS:     #0 {{.*}} in __msan_allocated_memory<br>
>> +// CHECK-ORIGINS:     #1 {{.*}} in main{{.*}}msan_print_shadow.cc:20<br>
>> +<br>
>> +// ...<br>
>> +<br>
>> +// CHECK-ORIGINS: Origin Z (origin_id {{.*}}):<br>
>> +// CHECK-ORIGINS:   Uninitialized value was created by a heap allocation<br>
>> +// CHECK-ORIGINS:     #0 {{.*}} in __msan_allocated_memory<br>
>> +// CHECK-ORIGINS:     #1 {{.*}} in main{{.*}}msan_print_shadow.cc:42<br>
>><br>
>> Propchange: compiler-rt/trunk/test/msan/msan_print_shadow.cc<br>
>><br>
>> ------------------------------------------------------------------------------<br>
>>     svn:eol-style = LF<br>
>><br>
>> Added: compiler-rt/trunk/test/msan/msan_print_shadow2.cc<br>
>> URL:<br>
>> <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/msan/msan_print_shadow2.cc?rev=207622&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/msan/msan_print_shadow2.cc?rev=207622&view=auto</a><br>

>><br>
>> ==============================================================================<br>
>> --- compiler-rt/trunk/test/msan/msan_print_shadow2.cc (added)<br>
>> +++ compiler-rt/trunk/test/msan/msan_print_shadow2.cc Wed Apr 30 04:50:30<br>
>> 2014<br>
>> @@ -0,0 +1,49 @@<br>
>> +// RUN: %clangxx_msan -m64 -O0 -g %s -o %t && %t >%t.out 2>&1<br>
>> +// RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NO-ORIGINS<br>
>> < %t.out<br>
>> +<br>
>> +// RUN: %clangxx_msan -fsanitize-memory-track-origins -m64 -O0 -g %s -o<br>
>> %t && %t >%t.out 2>&1<br>
>> +// RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-ORIGINS <<br>
>> %t.out<br>
>> +<br>
>> +// RUN: %clangxx_msan -fsanitize-memory-track-origins=2 -m64 -O0 -g %s -o<br>
>> %t && %t >%t.out 2>&1<br>
>> +// RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-ORIGINS <<br>
>> %t.out<br>
>> +<br>
>> +#include <sanitizer/msan_interface.h><br>
>> +<br>
>> +int main(void) {<br>
>> +  char *p = new char[16];<br>
>> +  __msan_print_shadow(p, 1);<br>
>> +  __msan_print_shadow(p+1, 1);<br>
>> +  __msan_print_shadow(p+3, 1);<br>
>> +  __msan_print_shadow(p+15, 1);<br>
>> +  __msan_print_shadow(p, 0);<br>
>> +  delete[] p;<br>
>> +  const char *q = "abc";<br>
>> +  __msan_print_shadow(q, 3);<br>
>> +  return 0;<br>
>> +}<br>
>> +<br>
>> +// CHECK: Shadow map of [0x{{.*}}, 0x{{.*}}), 1 bytes:<br>
>> +// CHECK-NO-ORIGINS:   0x{{.*}}: ff...... ........ ........ ........<br>
>> +// CHECK-ORIGINS:   0x{{.*}}: ff...... ........ ........ ........  |A . .<br>
>> .|<br>
>> +// CHECK-ORIGINS: Origin A (origin_id {{.*}}):<br>
>> +<br>
>> +// CHECK: Shadow map of [0x{{.*}}, 0x{{.*}}), 1 bytes:<br>
>> +// CHECK-NO-ORIGINS:   0x{{.*}}: ..ff.... ........ ........ ........<br>
>> +// CHECK-ORIGINS:   0x{{.*}}: ..ff.... ........ ........ ........  |A . .<br>
>> .|<br>
>> +// CHECK-ORIGINS: Origin A (origin_id {{.*}}):<br>
>> +<br>
>> +// CHECK: Shadow map of [0x{{.*}}, 0x{{.*}}), 1 bytes:<br>
>> +// CHECK-NO-ORIGINS:   0x{{.*}}: ......ff ........ ........ ........<br>
>> +// CHECK-ORIGINS:   0x{{.*}}: ......ff ........ ........ ........  |A . .<br>
>> .|<br>
>> +// CHECK-ORIGINS: Origin A (origin_id {{.*}}):<br>
>> +<br>
>> +// CHECK: Shadow map of [0x{{.*}}, 0x{{.*}}), 1 bytes:<br>
>> +// CHECK-NO-ORIGINS:   0x{{.*}}: ......ff ........ ........ ........<br>
>> +// CHECK-ORIGINS:   0x{{.*}}: ......ff ........ ........ ........  |A . .<br>
>> .|<br>
>> +// CHECK-ORIGINS: Origin A (origin_id {{.*}}):<br>
>> +<br>
>> +// CHECK: Shadow map of [0x{{.*}}, 0x{{.*}}), 0 bytes:<br>
>> +<br>
>> +// CHECK: Shadow map of [0x{{.*}}, 0x{{.*}}), 3 bytes:<br>
>> +// CHECK-NO-ORIGINS:   0x{{.*}}: 000000.. ........ ........ ........<br>
>> +// CHECK-ORIGINS:   0x{{.*}}: 000000.. ........ ........ ........  |. . .<br>
>> .|<br>
>><br>
>> Propchange: compiler-rt/trunk/test/msan/msan_print_shadow2.cc<br>
>><br>
>> ------------------------------------------------------------------------------<br>
>>     svn:eol-style = LF<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>
><br>
><br>
><br>
><br>
> --<br>
> Alexey Samsonov, Mountain View, CA<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>
><br>
</blockquote></div>