Skip to content

Commit 5dfcb3e

Browse files
committed
[asan,test] Improve tests to ensure instrumentation even in the presence of StackSafetyAnalysis
1 parent c63febb commit 5dfcb3e

File tree

3 files changed

+40
-28
lines changed

3 files changed

+40
-28
lines changed

llvm/test/Instrumentation/AddressSanitizer/debug_info_noninstrumented_alloca2.ll

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
; Make sure we don't break the IR when moving non-instrumented allocas
22

3-
; RUN: opt < %s -passes=asan -S | FileCheck %s
4-
; RUN: opt < %s -passes=asan -asan-instrument-dynamic-allocas -S | FileCheck %s
3+
; RUN: opt < %s -passes=asan -asan-use-stack-safety=1 -S | FileCheck %s
4+
; RUN: opt < %s -passes=asan -asan-use-stack-safety=1 -asan-instrument-dynamic-allocas -S | FileCheck %s
55

66
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
77
target triple = "x86_64-apple-macosx10.10.0"
88

9-
define i32 @foo() sanitize_address {
9+
define i32 @foo(i64 %i) sanitize_address {
1010
entry:
1111
%non_instrumented1 = alloca i32, align 4
1212
%t = load i32, ptr %non_instrumented1, align 4
13-
%instrumented = alloca i32, align 4
14-
%ptr = ptrtoint ptr %instrumented to i32
13+
%instrumented = alloca [2 x i32], align 4
14+
%ai = getelementptr inbounds [2 x i32], ptr %instrumented, i64 0, i64 %i
15+
store volatile i8 0, ptr %ai, align 4
1516
ret i32 %t
1617
}
1718

llvm/test/Instrumentation/AddressSanitizer/hoist-argument-init-insts.ll

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; RUN: opt < %s -passes=asan -S | FileCheck %s
1+
; RUN: opt < %s -passes=asan -asan-use-after-scope -asan-use-stack-safety=1 -S | FileCheck %s
22

33
; Source (-O0 -fsanitize=address -fsanitize-address-use-after-scope):
44
;; struct S { int x, y; };
@@ -18,15 +18,16 @@ target triple = "x86_64-apple-macosx10.14.0"
1818
; CHECK-LABEL: define {{.*}} @_Z4swapP1SS0_b(
1919

2020
; First come the argument allocas.
21-
; CHECK: [[argA:%.*]] = alloca ptr,
22-
; CHECK-NEXT: [[argB:%.*]] = alloca ptr,
23-
; CHECK-NEXT: [[argDoit:%.*]] = alloca i8,
21+
; CHECK: %a.addr = alloca ptr, align 8
22+
; CHECK-NEXT: %b.addr = alloca ptr, align 8
23+
; CHECK-NEXT: %doit.addr = alloca i8, align 1
2424

2525
; Next, the stores into the argument allocas.
26-
; CHECK-NEXT: store ptr {{.*}}, ptr [[argA]]
27-
; CHECK-NEXT: store ptr {{.*}}, ptr [[argB]]
26+
; CHECK-NEXT: store ptr {{.*}}, ptr %a.addr
27+
; CHECK-NEXT: store ptr {{.*}}, ptr %b.addr
2828
; CHECK-NEXT: [[frombool:%.*]] = zext i1 {{.*}} to i8
29-
; CHECK-NEXT: store i8 [[frombool]], ptr [[argDoit]]
29+
; CHECK-NEXT: store i8 %frombool, ptr %doit.addr, align 1
30+
; CHECK-NEXT: [[stack_base:%.*]] = alloca i64, align 8
3031

3132
define void @_Z4swapP1SS0_b(ptr %a, ptr %b, i1 zeroext %doit) sanitize_address {
3233
entry:
@@ -65,9 +66,12 @@ return: ; preds = %if.end, %if.then
6566
; CHECK: [[argA:%.*]] = alloca ptr,
6667
; CHECK-NEXT: [[argB:%.*]] = alloca ptr,
6768
; CHECK-NEXT: [[argDoit:%.*]] = alloca i8,
69+
; CHECK-NEXT: %tmp = alloca %struct.S, align 4
6870
; CHECK-NEXT: store ptr {{.*}}, ptr [[argA]]
6971
; CHECK-NEXT: store ptr {{.*}}, ptr [[argB]]
70-
; CHECK-NEXT: [[stack_base:%.*]] = alloca i64
72+
; CHECK-NEXT: %0 = load i8, ptr %doit.addr, align 1
73+
; CHECK-NEXT: %frombool = zext i1 %doit to i8
74+
; CHECK-NEXT: store i8 %frombool, ptr %doit.addr, align 1
7175
define void @func_with_load_in_arginit_sequence(ptr %a, ptr %b, i1 zeroext %doit) sanitize_address {
7276
entry:
7377
%a.addr = alloca ptr, align 8
@@ -108,10 +112,13 @@ return: ; preds = %if.end, %if.then
108112
; CHECK: [[argA:%.*]] = alloca ptr,
109113
; CHECK-NEXT: [[argB:%.*]] = alloca ptr,
110114
; CHECK-NEXT: [[argDoit:%.*]] = alloca i8,
115+
; CHECK-NEXT: %tmp = alloca %struct.S, align 4
116+
; CHECK-NEXT: %tmp2 = alloca %struct.S, align 4
111117
; CHECK-NEXT: store ptr {{.*}}, ptr [[argA]]
112118
; CHECK-NEXT: store ptr {{.*}}, ptr [[argB]]
113119
; CHECK-NEXT: [[frombool:%.*]] = zext i1 {{.*}} to i8
114120
; CHECK-NEXT: store i8 [[frombool]], ptr [[argDoit]]
121+
; CHECK-NEXT: %0 = load i8, ptr %doit.addr, align 1
115122
define void @func_with_multiple_interesting_allocas(ptr %a, ptr %b, i1 zeroext %doit) sanitize_address {
116123
entry:
117124
%a.addr = alloca ptr, align 8

llvm/test/Instrumentation/AddressSanitizer/lifetime.ll

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,24 @@ target triple = "x86_64-unknown-linux-gnu"
88
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) nounwind
99
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) nounwind
1010

11-
define void @lifetime_no_size() sanitize_address {
12-
; CHECK-LABEL: define void @lifetime_no_size()
11+
; CHECK-LABEL: define void @lifetime_no_size(
12+
define void @lifetime_no_size(i64 %i) sanitize_address {
1313
entry:
14-
%i = alloca i32, align 4
14+
%a = alloca [2 x i32], align 4
1515

16-
; Poison memory in prologue: F1F1F1F104F3F3F3
17-
; CHECK: store i64 -868083100587789839, ptr %{{[0-9]+}}
16+
; Poison memory in prologue: 0xf3f3f300f1f1f1f1
17+
; CHECK: store i64 -868083117767659023, ptr %[[#]]
1818

19-
call void @llvm.lifetime.start.p0(i64 -1, ptr %i)
19+
call void @llvm.lifetime.start.p0(i64 -1, ptr %a)
2020
; Check that lifetime with no size are ignored.
2121
; CHECK-NOT: store
2222
; CHECK: call void @llvm.lifetime.start
2323

24-
store volatile i8 0, ptr %i
24+
%ai = getelementptr inbounds [2 x i32], ptr %a, i64 0, i64 %i
25+
store volatile i8 0, ptr %ai, align 4
2526
; CHECK: store volatile
2627

27-
call void @llvm.lifetime.end.p0(i64 -1, ptr %i)
28+
call void @llvm.lifetime.end.p0(i64 -1, ptr %a)
2829
; Check that lifetime with no size are ignored.
2930
; CHECK-NOT: store
3031
; CHECK: call void @llvm.lifetime.end
@@ -128,24 +129,26 @@ bb1:
128129
}
129130

130131
; Check that arguments of lifetime may come from getelementptr nodes.
131-
define void @getelementptr_args() sanitize_address{
132+
define void @getelementptr_args(i64 %i) sanitize_address{
132133
; CHECK-LABEL: define void @getelementptr_args
133134
entry:
134135
%x = alloca [1024 x i8], align 16
135-
%d = alloca ptr, align 8
136+
%a = alloca [2 x ptr], align 8
136137

137138
; F1F1F1F1
138139
; CHECK: store i32 -235802127, ptr %{{[0-9]+}}
139-
; F3F3F3F3F3F3F3F3
140-
; CHECK: store i64 -868082074056920077, ptr %{{[0-9]+}}
141-
; F3F3F3F3F3F3F3F3
142-
; CHECK: store i64 -868082074056920077, ptr %{{[0-9]+}}
140+
; CHECK: call void @__asan_set_shadow_f8(i64 %[[#]], i64 128)
141+
; 0xf2f2f2f2f2f2f2f2
142+
; CHECK: store i64 -940422246894996750, ptr %[[#]]
143+
; 0xf2f2f2f2f2f2f2f2
144+
; CHECK: store i64 -940422246894996750, ptr %[[#]]
143145

144146
call void @llvm.lifetime.start.p0(i64 1024, ptr %x)
145147
; CHECK: call void @__asan_set_shadow_00(i64 %{{[0-9]+}}, i64 128)
146148
; CHECK-NEXT: call void @llvm.lifetime.start
147149

148-
store ptr %x, ptr %d, align 8
150+
%ai = getelementptr inbounds [2 x ptr], ptr %a, i64 0, i64 %i
151+
store ptr %x, ptr %ai, align 8
149152
; CHECK: store ptr
150153

151154
call void @llvm.lifetime.end.p0(i64 1024, ptr %x)
@@ -154,6 +157,7 @@ entry:
154157

155158
ret void
156159
; CHECK: call void @__asan_set_shadow_00(i64 %{{[0-9]+}}, i64 148)
160+
; CHECK: store i16 0, ptr %[[#]], align 1
157161
; CHECK-NEXT: ret void
158162
}
159163

0 commit comments

Comments
 (0)