62 lines · plain
1; RUN: opt -safe-stack -S -mtriple=i386-pc-linux-gnu < %s -o - | FileCheck %s2; RUN: opt -safe-stack -S -mtriple=x86_64-pc-linux-gnu < %s -o - | FileCheck %s3; RUN: opt -passes=safe-stack -S -mtriple=i386-pc-linux-gnu < %s -o - | FileCheck %s4; RUN: opt -passes=safe-stack -S -mtriple=x86_64-pc-linux-gnu < %s -o - | FileCheck %s5 6@.str = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 17 8define void @bad_store() nounwind uwtable safestack {9entry:10 ; CHECK-LABEL: @bad_store(11 ; CHECK: __safestack_unsafe_stack_ptr12 ; CHECK: ret void13 %a = alloca i32, align 414 %0 = ptrtoint ptr %a to i6415 %1 = inttoptr i64 %0 to ptr16 store i64 zeroinitializer, ptr %117 ret void18}19 20define void @good_store() nounwind uwtable safestack {21entry:22 ; CHECK-LABEL: @good_store(23 ; CHECK-NOT: __safestack_unsafe_stack_ptr24 ; CHECK: ret void25 %a = alloca i32, align 426 store i8 zeroinitializer, ptr %a27 ret void28}29 30define void @overflow_gep_store() nounwind uwtable safestack {31entry:32 ; CHECK-LABEL: @overflow_gep_store(33 ; CHECK: __safestack_unsafe_stack_ptr34 ; CHECK: ret void35 %a = alloca i32, align 436 %0 = getelementptr i8, ptr %a, i32 437 store i8 zeroinitializer, ptr %038 ret void39}40 41define void @underflow_gep_store() nounwind uwtable safestack {42entry:43 ; CHECK-LABEL: @underflow_gep_store(44 ; CHECK: __safestack_unsafe_stack_ptr45 ; CHECK: ret void46 %a = alloca i32, align 447 %0 = getelementptr i8, ptr %a, i32 -148 store i8 zeroinitializer, ptr %049 ret void50}51 52define void @good_gep_store() nounwind uwtable safestack {53entry:54 ; CHECK-LABEL: @good_gep_store(55 ; CHECK-NOT: __safestack_unsafe_stack_ptr56 ; CHECK: ret void57 %a = alloca i32, align 458 %0 = getelementptr i8, ptr %a, i32 359 store i8 zeroinitializer, ptr %060 ret void61}62