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