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