Home | History | Annotate | Download | only in SafeStack
      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 
      4 define void @f() safestack {
      5 ; CHECK-LABEL: define void @f
      6 entry:
      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 
     84 declare void @capture8(i8*)
     85