blob: 84ef9bf6186765772fef0365820a78ecec1bc502 [file] [edit]
; RUN: opt -mtriple=x86_64-pc-linux-gnu -safestack-use-pointer-address \
; RUN: -passes='require<libcall-lowering-info>,function(require<domtree>,safe-stack,verify<domtree>)' \
; RUN: -disable-output < %s
; RUN: opt -mtriple=x86_64-pc-linux-gnu -safestack-use-pointer-address \
; RUN: -domtree -safe-stack -loops -verify-dom-info \
; RUN: -disable-output < %s
@unsafe_stack_pointer_a = thread_local global ptr null
@unsafe_stack_pointer_b = thread_local global ptr null
declare i32 @get_runtime_mode()
declare void @escape(ptr)
define ptr @__safestack_pointer_address() alwaysinline {
entry:
%first = call i32 @get_runtime_mode()
%use_a = icmp eq i32 %first, 0
br i1 %use_a, label %a, label %b
a:
ret ptr @unsafe_stack_pointer_a
b:
ret ptr @unsafe_stack_pointer_b
}
define i32 @caller() safestack {
entry:
%unsafe = alloca i32, align 4
call void @escape(ptr %unsafe)
%second = call i32 @get_runtime_mode()
ret i32 %second
}