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