1*9880d681SAndroid Build Coastguard Worker; This test checks that we are not instrumenting direct inbound stack accesses. 2*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -asan -asan-module -asan-opt-stack -S | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*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-S128" 5*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-linux-gnu" 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker;@sink = global i32* null, align 4 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker; Ignore direct inbounds stack access. 10*9880d681SAndroid Build Coastguard Workerdefine void @foo() uwtable sanitize_address { 11*9880d681SAndroid Build Coastguard Workerentry: 12*9880d681SAndroid Build Coastguard Worker %a = alloca i32, align 4 13*9880d681SAndroid Build Coastguard Worker store i32 42, i32* %a, align 4 14*9880d681SAndroid Build Coastguard Worker ret void 15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: define void @foo 16*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: __asan_report 17*9880d681SAndroid Build Coastguard Worker; CHECK: ret void 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; Don't ignore dynamic indexing. 21*9880d681SAndroid Build Coastguard Workerdefine void @baz(i64 %i) sanitize_address { 22*9880d681SAndroid Build Coastguard Workerentry: 23*9880d681SAndroid Build Coastguard Worker %a = alloca [10 x i32], align 4 24*9880d681SAndroid Build Coastguard Worker %e = getelementptr inbounds [10 x i32], [10 x i32]* %a, i32 0, i64 %i 25*9880d681SAndroid Build Coastguard Worker store i32 42, i32* %e, align 4 26*9880d681SAndroid Build Coastguard Worker ret void 27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: define void @baz 28*9880d681SAndroid Build Coastguard Worker; CHECK: __asan_report 29*9880d681SAndroid Build Coastguard Worker; CHECK: ret void 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine void @bar() sanitize_address { 33*9880d681SAndroid Build Coastguard Workerentry: 34*9880d681SAndroid Build Coastguard Worker %a = alloca [10 x i32], align 4 35*9880d681SAndroid Build Coastguard Worker %e = getelementptr inbounds [10 x i32], [10 x i32]* %a, i32 0, i64 12 36*9880d681SAndroid Build Coastguard Worker store i32 42, i32* %e, align 4 37*9880d681SAndroid Build Coastguard Worker ret void 38*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: define void @bar 39*9880d681SAndroid Build Coastguard Worker; CHECK: __asan_report 40*9880d681SAndroid Build Coastguard Worker; CHECK: ret void 41*9880d681SAndroid Build Coastguard Worker} 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerdefine void @endoftests() sanitize_address { 44*9880d681SAndroid Build Coastguard Workerentry: 45*9880d681SAndroid Build Coastguard Worker ret void 46*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: define void @endoftests 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49