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
3132define void @_Z4swapP1SS0_b (ptr %a , ptr %b , i1 zeroext %doit ) sanitize_address {
3233entry:
@@ -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
7175define void @func_with_load_in_arginit_sequence (ptr %a , ptr %b , i1 zeroext %doit ) sanitize_address {
7276entry:
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
115122define void @func_with_multiple_interesting_allocas (ptr %a , ptr %b , i1 zeroext %doit ) sanitize_address {
116123entry:
117124 %a.addr = alloca ptr , align 8
0 commit comments