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