blob: ceb18bb70c2045b6357849852aa0fa07fa7e7c05 [file] [log] [blame]
Eric Christophercee313d2019-04-17 04:52:47 +00001; Regression test for safestack layout. Used to fail with asan.
2; RUN: opt -safe-stack -S -mtriple=x86_64-pc-linux-gnu < %s -o - | FileCheck %s
3
4define void @f() safestack {
5; CHECK-LABEL: define void @f
6entry:
7; CHECK: %[[USP:.*]] = load i8*, i8** @__safestack_unsafe_stack_ptr
8; CHECK: getelementptr i8, i8* %[[USP]], i32 -224
9
10 %x0 = alloca i8, align 16
11 %x1 = alloca i8, align 16
12 %x2 = alloca i8, align 16
13 %x3 = alloca i8, align 16
14 %x4 = alloca i8, align 16
15 %x5 = alloca i8, align 16
16 %x6 = alloca i8, align 16
17 %x7 = alloca i8, align 16
18 %x8 = alloca i8, align 16
19 %x9 = alloca i8, align 16
20 %x10 = alloca i8, align 16
21 %x11 = alloca i8, align 16
22 %x12 = alloca i8, align 16
23 %x13 = alloca i8, align 16
24 %y0 = alloca i8, align 2
25 %y1 = alloca i8, align 2
26 %y2 = alloca i8, align 2
27 %y3 = alloca i8, align 2
28 %y4 = alloca i8, align 2
29 %y5 = alloca i8, align 2
30 %y6 = alloca i8, align 2
31 %y7 = alloca i8, align 2
32 %y8 = alloca i8, align 2
33
34; CHECK: getelementptr i8, i8* %[[USP]], i32 -16
35 call void @capture8(i8* %x0)
36; CHECK: getelementptr i8, i8* %[[USP]], i32 -32
37 call void @capture8(i8* %x1)
38; CHECK: getelementptr i8, i8* %[[USP]], i32 -48
39 call void @capture8(i8* %x2)
40; CHECK: getelementptr i8, i8* %[[USP]], i32 -64
41 call void @capture8(i8* %x3)
42; CHECK: getelementptr i8, i8* %[[USP]], i32 -80
43 call void @capture8(i8* %x4)
44; CHECK: getelementptr i8, i8* %[[USP]], i32 -96
45 call void @capture8(i8* %x5)
46; CHECK: getelementptr i8, i8* %[[USP]], i32 -112
47 call void @capture8(i8* %x6)
48; CHECK: getelementptr i8, i8* %[[USP]], i32 -128
49 call void @capture8(i8* %x7)
50; CHECK: getelementptr i8, i8* %[[USP]], i32 -144
51 call void @capture8(i8* %x8)
52; CHECK: getelementptr i8, i8* %[[USP]], i32 -160
53 call void @capture8(i8* %x9)
54; CHECK: getelementptr i8, i8* %[[USP]], i32 -176
55 call void @capture8(i8* %x10)
56; CHECK: getelementptr i8, i8* %[[USP]], i32 -192
57 call void @capture8(i8* %x11)
58; CHECK: getelementptr i8, i8* %[[USP]], i32 -208
59 call void @capture8(i8* %x12)
60; CHECK: getelementptr i8, i8* %[[USP]], i32 -224
61 call void @capture8(i8* %x13)
62; CHECK: getelementptr i8, i8* %[[USP]], i32 -2
63 call void @capture8(i8* %y0)
64; CHECK: getelementptr i8, i8* %[[USP]], i32 -4
65 call void @capture8(i8* %y1)
66; CHECK: getelementptr i8, i8* %[[USP]], i32 -6
67 call void @capture8(i8* %y2)
68; CHECK: getelementptr i8, i8* %[[USP]], i32 -8
69 call void @capture8(i8* %y3)
70; CHECK: getelementptr i8, i8* %[[USP]], i32 -10
71 call void @capture8(i8* %y4)
72; CHECK: getelementptr i8, i8* %[[USP]], i32 -12
73 call void @capture8(i8* %y5)
74; CHECK: getelementptr i8, i8* %[[USP]], i32 -14
75 call void @capture8(i8* %y6)
76; CHECK: getelementptr i8, i8* %[[USP]], i32 -18
77 call void @capture8(i8* %y7)
78; CHECK: getelementptr i8, i8* %[[USP]], i32 -20
79 call void @capture8(i8* %y8)
80
81 ret void
82}
83
84declare void @capture8(i8*)