1; 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*) 85