[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / Instrumentation / ThreadSanitizer / capture.ll
blob8edf310df98234a25bac1d34221370b1068ead14
1 ; RUN: opt < %s -passes=tsan -S | FileCheck %s
3 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
5 declare void @escape(ptr)
7 @sink = global ptr null, align 4
9 define void @captured0() nounwind uwtable sanitize_thread {
10 entry:
11   %ptr = alloca i32, align 4
12   ; escapes due to call
13   call void @escape(ptr %ptr)
14   store i32 42, ptr %ptr, align 4
15   ret void
17 ; CHECK-LABEL: define void @captured0
18 ; CHECK: __tsan_write
19 ; CHECK: ret void
21 define void @captured1() nounwind uwtable sanitize_thread {
22 entry:
23   %ptr = alloca i32, align 4
24   ; escapes due to store into global
25   store ptr %ptr, ptr @sink, align 8
26   store i32 42, ptr %ptr, align 4
27   ret void
29 ; CHECK-LABEL: define void @captured1
30 ; CHECK: __tsan_write
31 ; CHECK: __tsan_write
32 ; CHECK: ret void
34 define void @captured2() nounwind uwtable sanitize_thread {
35 entry:
36   %ptr = alloca i32, align 4
37   %tmp = alloca ptr, align 8
38   ; transitive escape
39   store ptr %ptr, ptr %tmp, align 8
40   %0 = load ptr, ptr %tmp, align 8
41   store ptr %0, ptr @sink, align 8
42   store i32 42, ptr %ptr, align 4
43   ret void
45 ; CHECK-LABEL: define void @captured2
46 ; CHECK: __tsan_write
47 ; CHECK: __tsan_write
48 ; CHECK: ret void
50 define void @notcaptured0() nounwind uwtable sanitize_thread {
51 entry:
52   %ptr = alloca i32, align 4
53   store i32 42, ptr %ptr, align 4
54   ; escapes due to call
55   call void @escape(ptr %ptr)
56   ret void
58 ; CHECK-LABEL: define void @notcaptured0
59 ; CHECK: __tsan_write
60 ; CHECK: ret void
62 define void @notcaptured1() nounwind uwtable sanitize_thread {
63 entry:
64   %ptr = alloca i32, align 4
65   store i32 42, ptr %ptr, align 4
66   ; escapes due to store into global
67   store ptr %ptr, ptr @sink, align 8
68   ret void
70 ; CHECK-LABEL: define void @notcaptured1
71 ; CHECK: __tsan_write
72 ; CHECK: __tsan_write
73 ; CHECK: ret void
75 define void @notcaptured2() nounwind uwtable sanitize_thread {
76 entry:
77   %ptr = alloca i32, align 4
78   %tmp = alloca ptr, align 8
79   store i32 42, ptr %ptr, align 4
80   ; transitive escape
81   store ptr %ptr, ptr %tmp, align 8
82   %0 = load ptr, ptr %tmp, align 8
83   store ptr %0, ptr @sink, align 8
84   ret void
86 ; CHECK-LABEL: define void @notcaptured2
87 ; CHECK: __tsan_write
88 ; CHECK: __tsan_write
89 ; CHECK: ret void