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