• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clangxx_msan -O0 -g %s -o %t && %run %t >%t.out 2>&1
2 // RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NO-ORIGINS < %t.out
3 
4 // RUN: %clangxx_msan -fsanitize-memory-track-origins -O0 -g %s -o %t && %run %t >%t.out 2>&1
5 // RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-ORIGINS < %t.out
6 
7 // RUN: %clangxx_msan -fsanitize-memory-track-origins=2 -O0 -g %s -o %t && %run %t >%t.out 2>&1
8 // RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-ORIGINS --check-prefix=CHECK-ORIGINS-2 < %t.out
9 
10 #include <sanitizer/msan_interface.h>
11 
main(void)12 int main(void) {
13   char volatile x;
14   char *p = new char[320];
15   p[2] = p[5] = 1;
16   p[8] = p[9] = p[10] = p[11] = p[12] = 2;
17 
18   __msan_allocated_memory(p + 4*3, 4);
19   __msan_allocated_memory(p + 4*4, 4);
20   __msan_allocated_memory(p + 4*5, 4);
21   __msan_allocated_memory(p + 4*6, 4);
22   __msan_allocated_memory(p + 4*7, 4);
23   __msan_allocated_memory(p + 4*8, 4);
24   __msan_allocated_memory(p + 4*9, 4);
25   __msan_allocated_memory(p + 4*10, 4);
26   __msan_allocated_memory(p + 4*11, 4);
27   __msan_allocated_memory(p + 4*12, 4);
28   __msan_allocated_memory(p + 4*13, 4);
29   __msan_allocated_memory(p + 4*14, 4);
30   __msan_allocated_memory(p + 4*15, 4);
31   __msan_allocated_memory(p + 4*16, 4);
32   __msan_allocated_memory(p + 4*17, 4);
33   __msan_allocated_memory(p + 4*18, 4);
34   __msan_allocated_memory(p + 4*19, 4);
35   __msan_allocated_memory(p + 4*20, 4);
36   __msan_allocated_memory(p + 4*21, 4);
37   __msan_allocated_memory(p + 4*22, 4);
38   __msan_allocated_memory(p + 4*23, 4);
39   __msan_allocated_memory(p + 4*24, 4);
40   __msan_allocated_memory(p + 4*25, 4);
41   __msan_allocated_memory(p + 4*26, 4);
42   __msan_allocated_memory(p + 4*27, 4);
43   __msan_allocated_memory(p + 4*28, 4);
44   __msan_allocated_memory(p + 4*29, 4);
45   __msan_allocated_memory(p + 4*30, 4);
46   __msan_allocated_memory(p + 4*31, 4);
47 
48   p[19] = x;
49 
50   __msan_print_shadow(p+5, 297);
51   delete[] p;
52   return 0;
53 }
54 
55 // CHECK: Shadow map of [{{.*}}), 297 bytes:
56 
57 // CHECK-NO-ORIGINS: 0x{{.*}}: ..00ffff 00000000 ffffffff ffffffff
58 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
59 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
60 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
61 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
62 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
63 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
64 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
65 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
66 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
67 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
68 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
69 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
70 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
71 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
72 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
73 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
74 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff
75 // CHECK-NO-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffff.... ........
76 
77 // CHECK-ORIGINS: 0x{{.*}}: ..00ffff 00000000 ffffffff ffffffff  |A . B C|
78 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |D E F G|
79 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |H I J K|
80 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |L M N O|
81 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |P Q R S|
82 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |T U V W|
83 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |X Y Z *|
84 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |* * * A|
85 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A A|
86 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A A|
87 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A A|
88 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A A|
89 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A A|
90 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A A|
91 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A A|
92 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A A|
93 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A A|
94 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffffffff ffffffff  |A A A A|
95 // CHECK-ORIGINS: 0x{{.*}}: ffffffff ffffffff ffff.... ........  |A A A .|
96 
97 // CHECK-ORIGINS: Origin A (origin_id {{.*}}):
98 // CHECK-ORIGINS:   Uninitialized value was created by a heap allocation
99 // CHECK-ORIGINS:     #1 {{.*}} in main{{.*}}msan_print_shadow.cc:14
100 
101 // CHECK-ORIGINS: Origin B (origin_id {{.*}}):
102 // CHECK-ORIGINS:   Memory was marked as uninitialized
103 // CHECK-ORIGINS:     #0 {{.*}} in __msan_allocated_memory
104 // CHECK-ORIGINS:     #1 {{.*}} in main{{.*}}msan_print_shadow.cc:18
105 
106 // CHECK-ORIGINS: Origin C (origin_id {{.*}}):
107 // CHECK-ORIGINS-2:  Uninitialized value was stored to memory at
108 // CHECK-ORIGINS-2:    #0 {{.*}} in main{{.*}}msan_print_shadow.cc:48
109 // CHECK-ORIGINS:   Uninitialized value was created by an allocation of 'x' in the stack frame of function 'main'
110 // CHECK-ORIGINS:     #0 {{.*}} in main{{.*}}msan_print_shadow.cc:12
111 
112 // CHECK-ORIGINS: Origin D (origin_id {{.*}}):
113 // CHECK-ORIGINS:   Memory was marked as uninitialized
114 // CHECK-ORIGINS:     #0 {{.*}} in __msan_allocated_memory
115 // CHECK-ORIGINS:     #1 {{.*}} in main{{.*}}msan_print_shadow.cc:20
116 
117 // ...
118 
119 // CHECK-ORIGINS: Origin Z (origin_id {{.*}}):
120 // CHECK-ORIGINS:   Memory was marked as uninitialized
121 // CHECK-ORIGINS:     #0 {{.*}} in __msan_allocated_memory
122 // CHECK-ORIGINS:     #1 {{.*}} in main{{.*}}msan_print_shadow.cc:42
123