6
6
; RUN: -passes=msan 2>&1 | FileCheck %s "--check-prefixes=CHECK,ORIGIN"
7
7
; RUN: opt < %s -msan-check-access-address=0 -msan-track-origins=2 -S \
8
8
; RUN: -passes=msan 2>&1 | FileCheck %s "--check-prefixes=CHECK,ORIGIN"
9
+ ; RUN: opt < %s -msan-check-access-address=0 -msan-track-origins=2 -msan-print-stack-names=false -S \
10
+ ; RUN: -passes=msan 2>&1 | FileCheck %s "--check-prefixes=CHECK,ORIGIN-LEAN"
9
11
; RUN: opt < %s -S -passes="msan<kernel>" 2>&1 | FileCheck %s \
10
12
; RUN: "--check-prefixes=CHECK,KMSAN"
11
13
; RUN: opt < %s -msan-kernel=1 -S -passes=msan 2>&1 | FileCheck %s \
@@ -15,6 +17,7 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3
15
17
target triple = "x86_64-unknown-linux-gnu"
16
18
17
19
; ORIGIN: [[IDPTR:@[0-9]+]] = private global i32 0
20
+ ; ORIGIN-LEAN: [[IDPTR:@[0-9]+]] = private global i32 0
18
21
; ORIGIN: [[DESCR:@[0-9]+]] = private constant [9 x i8] c"unique_x\00"
19
22
20
23
define void @static () sanitize_memory {
27
30
; INLINE: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 -1, i64 4, i1 false)
28
31
; CALL: call void @__msan_poison_stack(i8* {{.*}}, i64 4)
29
32
; ORIGIN: call void @__msan_set_alloca_origin_with_descr(i8* {{.*}}, i64 4, i8* {{.*}} [[IDPTR]] {{.*}}, i8* {{.*}} [[DESCR]],
33
+ ; ORIGIN-LEAN: call void @__msan_set_alloca_origin_no_descr(i8* {{.*}}, i64 4, i8* {{.*}} [[IDPTR]]
30
34
; KMSAN: call void @__msan_poison_alloca(i8* {{.*}}, i64 4,
31
35
; CHECK: ret void
32
36
43
47
; INLINE: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 -1, i64 4, i1 false)
44
48
; CALL: call void @__msan_poison_stack(i8* {{.*}}, i64 4)
45
49
; ORIGIN: call void @__msan_set_alloca_origin_with_descr(i8* {{.*}}, i64 4,
50
+ ; ORIGIN-LEAN: call void @__msan_set_alloca_origin_no_descr(i8* {{.*}}, i64 4,
46
51
; KMSAN: call void @__msan_poison_alloca(i8* {{.*}}, i64 4,
47
52
; CHECK: ret void
48
53
56
61
; INLINE: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 -1, i64 20, i1 false)
57
62
; CALL: call void @__msan_poison_stack(i8* {{.*}}, i64 20)
58
63
; ORIGIN: call void @__msan_set_alloca_origin_with_descr(i8* {{.*}}, i64 20,
64
+ ; ORIGIN-LEAN: call void @__msan_set_alloca_origin_no_descr(i8* {{.*}}, i64 20,
59
65
; KMSAN: call void @__msan_poison_alloca(i8* {{.*}}, i64 20,
60
66
; CHECK: ret void
61
67
70
76
; INLINE: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 -1, i64 %[[A]], i1 false)
71
77
; CALL: call void @__msan_poison_stack(i8* {{.*}}, i64 %[[A]])
72
78
; ORIGIN: call void @__msan_set_alloca_origin_with_descr(i8* {{.*}}, i64 %[[A]],
79
+ ; ORIGIN-LEAN: call void @__msan_set_alloca_origin_no_descr(i8* {{.*}}, i64 %[[A]],
73
80
; KMSAN: call void @__msan_poison_alloca(i8* {{.*}}, i64 %[[A]],
74
81
; CHECK: ret void
75
82
84
91
; INLINE: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 0, i64 20, i1 false)
85
92
; CALL: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 0, i64 20, i1 false)
86
93
; ORIGIN-NOT: call void @__msan_set_alloca_origin_with_descr(i8* {{.*}}, i64 20,
94
+ ; ORIGIN-LEAN-NOT: call void @__msan_set_alloca_origin_no_descr(i8* {{.*}}, i64 20,
87
95
; KMSAN: call void @__msan_unpoison_alloca(i8* {{.*}}, i64 20)
88
96
; CHECK: ret void
89
97
@@ -113,12 +121,14 @@ another_bb:
113
121
; INLINE: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 -1, i64 4, i1 false)
114
122
; CALL: call void @__msan_poison_stack(i8* {{.*}}, i64 4)
115
123
; ORIGIN: call void @__msan_set_alloca_origin_with_descr(i8* {{.*}}, i64 4,
124
+ ; ORIGIN-LEAN: call void @__msan_set_alloca_origin_no_descr(i8* {{.*}}, i64 4,
116
125
; KMSAN: call void @__msan_poison_alloca(i8* {{.*}}, i64 4,
117
126
118
127
; CHECK: call void @llvm.lifetime.start
119
128
; INLINE: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 -1, i64 4, i1 false)
120
129
; CALL: call void @__msan_poison_stack(i8* {{.*}}, i64 4)
121
130
; ORIGIN: call void @__msan_set_alloca_origin_with_descr(i8* {{.*}}, i64 4,
131
+ ; ORIGIN-LEAN: call void @__msan_set_alloca_origin_no_descr(i8* {{.*}}, i64 4,
122
132
; KMSAN: call void @__msan_poison_alloca(i8* {{.*}}, i64 4,
123
133
; CHECK: ret void
124
134
@@ -140,6 +150,7 @@ entry:
140
150
; INLINE: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 -1, i64 %[[A]], i1 false)
141
151
; CALL: call void @__msan_poison_stack(i8* {{.*}}, i64 %[[A]])
142
152
; ORIGIN: call void @__msan_set_alloca_origin_with_descr(i8* {{.*}}, i64 %[[A]],
153
+ ; ORIGIN-LEAN: call void @__msan_set_alloca_origin_no_descr(i8* {{.*}}, i64 %[[A]],
143
154
; KMSAN: call void @__msan_poison_alloca(i8* {{.*}}, i64 %[[A]],
144
155
; CHECK: call void @llvm.lifetime.end
145
156
; CHECK: ret void
@@ -180,35 +191,41 @@ another_bb:
180
191
; INLINE: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 -1, i64 4, i1 false)
181
192
; CALL: call void @__msan_poison_stack(i8* {{.*}}, i64 4)
182
193
; ORIGIN: call void @__msan_set_alloca_origin_with_descr(i8* {{.*}}, i64 4,
194
+ ; ORIGIN-LEAN: call void @__msan_set_alloca_origin_no_descr(i8* {{.*}}, i64 4,
183
195
; KMSAN: call void @__msan_poison_alloca(i8* {{.*}}, i64 4,
184
196
; CHECK: %y = alloca i32
185
197
; INLINE: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 -1, i64 4, i1 false)
186
198
; CALL: call void @__msan_poison_stack(i8* {{.*}}, i64 4)
187
199
; ORIGIN: call void @__msan_set_alloca_origin_with_descr(i8* {{.*}}, i64 4,
200
+ ; ORIGIN-LEAN: call void @__msan_set_alloca_origin_no_descr(i8* {{.*}}, i64 4,
188
201
; KMSAN: call void @__msan_poison_alloca(i8* {{.*}}, i64 4,
189
202
; CHECK: %z = alloca i32
190
203
; INLINE: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 -1, i64 4, i1 false)
191
204
; CALL: call void @__msan_poison_stack(i8* {{.*}}, i64 4)
192
205
; ORIGIN: call void @__msan_set_alloca_origin_with_descr(i8* {{.*}}, i64 4,
206
+ ; ORIGIN-LEAN: call void @__msan_set_alloca_origin_no_descr(i8* {{.*}}, i64 4,
193
207
; KMSAN: call void @__msan_poison_alloca(i8* {{.*}}, i64 4,
194
208
195
209
; There're two lifetime intrinsics for %z, but we must instrument it only once.
196
210
; INLINE-NOT: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 -1, i64 4, i1 false)
197
211
; CALL-NOT: call void @__msan_poison_stack(i8* {{.*}}, i64 4)
198
212
; ORIGIN-NOT: call void @__msan_set_alloca_origin_with_descr(i8* {{.*}}, i64 4,
213
+ ; ORIGIN-LEAN-NOT: call void @__msan_set_alloca_origin_no_descr(i8* {{.*}}, i64 4,
199
214
; KMSAN-NOT: call void @__msan_poison_alloca(i8* {{.*}}, i64 4,
200
215
; CHECK-LABEL: another_bb:
201
216
202
217
; CHECK: call void @llvm.lifetime.start
203
218
; INLINE-NOT: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 -1, i64 4, i1 false)
204
219
; CALL-NOT: call void @__msan_poison_stack(i8* {{.*}}, i64 4)
205
220
; ORIGIN-NOT: call void @__msan_set_alloca_origin_with_descr(i8* {{.*}}, i64 4,
221
+ ; ORIGIN-LEAN-NOT: call void @__msan_set_alloca_origin_no_descr(i8* {{.*}}, i64 4,
206
222
; KMSAN-NOT: call void @__msan_poison_alloca(i8* {{.*}}, i64 4,
207
223
; CHECK: call void @llvm.lifetime.end
208
224
; CHECK: call void @llvm.lifetime.start
209
225
; INLINE-NOT: call void @llvm.memset.p0i8.i64(i8* align 4 {{.*}}, i8 -1, i64 4, i1 false)
210
226
; CALL-NOT: call void @__msan_poison_stack(i8* {{.*}}, i64 4)
211
227
; ORIGIN-NOT: call void @__msan_set_alloca_origin_with_descr(i8* {{.*}}, i64 4,
228
+ ; ORIGIN-LEAN-NOT: call void @__msan_set_alloca_origin_no_descr(i8* {{.*}}, i64 4,
212
229
; KMSAN-NOT: call void @__msan_poison_alloca(i8* {{.*}}, i64 4,
213
230
; CHECK: call void @llvm.lifetime.end
214
231
0 commit comments