diff options
Diffstat (limited to 'test/CodeGen/X86/dynamic-alloca-lifetime.ll')
-rw-r--r-- | test/CodeGen/X86/dynamic-alloca-lifetime.ll | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/test/CodeGen/X86/dynamic-alloca-lifetime.ll b/test/CodeGen/X86/dynamic-alloca-lifetime.ll new file mode 100644 index 0000000..f019bed --- /dev/null +++ b/test/CodeGen/X86/dynamic-alloca-lifetime.ll @@ -0,0 +1,44 @@ +; RUN: llc -no-stack-coloring=false < %s | FileCheck %s + +; This test crashed in PEI because the stack protector was dead. +; This was due to it being colored, which was in turn due to incorrect +; lifetimes being applied to the stack protector frame index. + +; CHECK: stack_chk_guard + +target datalayout = "e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128" +target triple = "i386-apple-macosx10.10.0" + +; Function Attrs: nounwind +declare void @llvm.lifetime.start(i64, i8* nocapture) #0 + +; Function Attrs: nounwind +declare void @llvm.lifetime.end(i64, i8* nocapture) #0 + +; Function Attrs: ssp +define void @foo(i1 %cond1, i1 %cond2) #1 { +entry: + %bitmapBuffer = alloca [8192 x i8], align 1 + br i1 %cond1, label %end1, label %bb1 + +bb1: + %bitmapBuffer229 = alloca [8192 x i8], align 1 + br i1 %cond2, label %end1, label %if.else130 + +end1: + ret void + +if.else130: ; preds = %bb1 + %tmp = getelementptr inbounds [8192 x i8]* %bitmapBuffer, i32 0, i32 0 + call void @llvm.lifetime.start(i64 8192, i8* %tmp) #0 + call void @llvm.lifetime.end(i64 8192, i8* %tmp) #0 + %tmp25 = getelementptr inbounds [8192 x i8]* %bitmapBuffer229, i32 0, i32 0 + call void @llvm.lifetime.start(i64 8192, i8* %tmp25) #0 + call void @llvm.lifetime.end(i64 8192, i8* %tmp25) #0 + br label %end1 +} + +declare void @bar() + +attributes #0 = { nounwind } +attributes #1 = { ssp }
\ No newline at end of file |