1*9880d681SAndroid Build Coastguard Worker; Test asan internal compiler flags: 2*9880d681SAndroid Build Coastguard Worker; -asan-instrument-allocas=1 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -asan -asan-module -asan-instrument-allocas=1 -S | FileCheck %s --check-prefix=CHECK-ALLOCA 5*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" 6*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-linux-gnu" 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdefine void @foo(i32 %len) sanitize_address { 9*9880d681SAndroid Build Coastguard Workerentry: 10*9880d681SAndroid Build Coastguard Worker; CHECK-ALLOCA-LABEL: define void @foo 11*9880d681SAndroid Build Coastguard Worker; CHECK-ALLOCA: __asan_alloca_poison 12*9880d681SAndroid Build Coastguard Worker; CHECK-ALLOCA: __asan_allocas_unpoison 13*9880d681SAndroid Build Coastguard Worker; CHECK-ALLOCA: ret void 14*9880d681SAndroid Build Coastguard Worker %0 = alloca i32, align 4 15*9880d681SAndroid Build Coastguard Worker %1 = alloca i8* 16*9880d681SAndroid Build Coastguard Worker store volatile i32 %len, i32* %0, align 4 17*9880d681SAndroid Build Coastguard Worker %2 = load i32, i32* %0, align 4 18*9880d681SAndroid Build Coastguard Worker %3 = zext i32 %2 to i64 19*9880d681SAndroid Build Coastguard Worker %4 = alloca i8, i64 %3, align 32 20*9880d681SAndroid Build Coastguard Worker store volatile i8 0, i8* %4 21*9880d681SAndroid Build Coastguard Worker ret void 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker; Test that dynamic alloca is not used for inalloca variables. 25*9880d681SAndroid Build Coastguard Workerdefine void @has_inalloca() uwtable sanitize_address { 26*9880d681SAndroid Build Coastguard Worker; CHECK-ALLOCA-LABEL: define void @has_inalloca 27*9880d681SAndroid Build Coastguard Worker; CHECK-ALLOCA-NOT: __asan_alloca_poison 28*9880d681SAndroid Build Coastguard Worker; CHECK-ALLOCA-NOT: __asan_alloca_unpoison 29*9880d681SAndroid Build Coastguard Worker; CHECK-ALLOCA: ret void 30*9880d681SAndroid Build Coastguard Workerentry: 31*9880d681SAndroid Build Coastguard Worker %t = alloca inalloca i32 32*9880d681SAndroid Build Coastguard Worker store i32 42, i32* %t 33*9880d681SAndroid Build Coastguard Worker call void @pass_inalloca(i32* inalloca %t) 34*9880d681SAndroid Build Coastguard Worker ret void 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerdeclare void @pass_inalloca(i32* inalloca) 38