1*45726c1aSDaniel Kiss; This test checks that we are not instrumenting sanitizer code. 2*45726c1aSDaniel Kiss; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-control-flow -S | FileCheck %s 3*45726c1aSDaniel Kiss 4*45726c1aSDaniel Kisstarget datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 5*45726c1aSDaniel Kisstarget triple = "x86_64-unknown-linux-gnu" 6*45726c1aSDaniel Kiss 7*45726c1aSDaniel Kiss; Function with sanitize_address is instrumented. 8*45726c1aSDaniel Kiss; Function Attrs: nounwind uwtable 9*45726c1aSDaniel Kissdefine void @instr_sa(ptr %a) sanitize_address { 10*45726c1aSDaniel Kissentry: 11*45726c1aSDaniel Kiss %tmp1 = load i32, ptr %a, align 4 12*45726c1aSDaniel Kiss %tmp2 = add i32 %tmp1, 1 13*45726c1aSDaniel Kiss store i32 %tmp2, ptr %a, align 4 14*45726c1aSDaniel Kiss ret void 15*45726c1aSDaniel Kiss} 16*45726c1aSDaniel Kiss 17*45726c1aSDaniel Kiss; CHECK-LABEL: @instr_sa 18*45726c1aSDaniel Kiss; CHECK: call void @__sanitizer_cov_trace_pc_guard( 19*45726c1aSDaniel Kiss 20*45726c1aSDaniel Kiss 21*45726c1aSDaniel Kiss; Function with disable_sanitizer_instrumentation is not instrumented. 22*45726c1aSDaniel Kiss; Function Attrs: nounwind uwtable 23*45726c1aSDaniel Kissdefine void @noinstr_dsi(ptr %a) disable_sanitizer_instrumentation { 24*45726c1aSDaniel Kissentry: 25*45726c1aSDaniel Kiss %tmp1 = load i32, ptr %a, align 4 26*45726c1aSDaniel Kiss %tmp2 = add i32 %tmp1, 1 27*45726c1aSDaniel Kiss store i32 %tmp2, ptr %a, align 4 28*45726c1aSDaniel Kiss ret void 29*45726c1aSDaniel Kiss} 30*45726c1aSDaniel Kiss 31*45726c1aSDaniel Kiss; CHECK-LABEL: @noinstr_dsi 32*45726c1aSDaniel Kiss; CHECK-NOT: call void @__sanitizer_cov_trace_pc_guard( 33*45726c1aSDaniel Kiss 34*45726c1aSDaniel Kiss 35*45726c1aSDaniel Kiss; disable_sanitizer_instrumentation takes precedence over sanitize_address. 36*45726c1aSDaniel Kiss; Function Attrs: nounwind uwtable 37*45726c1aSDaniel Kissdefine void @noinstr_dsi_sa(ptr %a) disable_sanitizer_instrumentation sanitize_address { 38*45726c1aSDaniel Kissentry: 39*45726c1aSDaniel Kiss %tmp1 = load i32, ptr %a, align 4 40*45726c1aSDaniel Kiss %tmp2 = add i32 %tmp1, 1 41*45726c1aSDaniel Kiss store i32 %tmp2, ptr %a, align 4 42*45726c1aSDaniel Kiss ret void 43*45726c1aSDaniel Kiss} 44*45726c1aSDaniel Kiss 45*45726c1aSDaniel Kiss; CHECK-LABEL: @noinstr_dsi_sa 46*45726c1aSDaniel Kiss; CHECK-NOT: call void @__sanitizer_cov_trace_pc_guard( 47