testsuite/52641 - Fix more sloppy tests.
[official-gcc.git] / libsanitizer / include / sanitizer / tsan_interface_atomic.h
blobde3a1c3936097ddb4e5634ab44d2b6f9c37b6d5b
1 //===-- tsan_interface_atomic.h ---------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file is a part of ThreadSanitizer (TSan), a race detector.
11 // Public interface header for TSan atomics.
12 //===----------------------------------------------------------------------===//
13 #ifndef TSAN_INTERFACE_ATOMIC_H
14 #define TSAN_INTERFACE_ATOMIC_H
16 #include <sanitizer/common_interface_defs.h>
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
22 typedef char __tsan_atomic8;
23 typedef short __tsan_atomic16;
24 typedef int __tsan_atomic32;
25 typedef long __tsan_atomic64;
26 #if defined(__SIZEOF_INT128__) || \
27 (__clang_major__ * 100 + __clang_minor__ >= 302)
28 __extension__ typedef __int128 __tsan_atomic128;
29 #define __TSAN_HAS_INT128 1
30 #else
31 #define __TSAN_HAS_INT128 0
32 #endif
34 // Part of ABI, do not change.
35 // https://github.com/llvm/llvm-project/blob/main/libcxx/include/atomic
36 typedef enum {
37 __tsan_memory_order_relaxed,
38 __tsan_memory_order_consume,
39 __tsan_memory_order_acquire,
40 __tsan_memory_order_release,
41 __tsan_memory_order_acq_rel,
42 __tsan_memory_order_seq_cst
43 } __tsan_memory_order;
45 __tsan_atomic8 SANITIZER_CDECL
46 __tsan_atomic8_load(const volatile __tsan_atomic8 *a, __tsan_memory_order mo);
47 __tsan_atomic16 SANITIZER_CDECL
48 __tsan_atomic16_load(const volatile __tsan_atomic16 *a, __tsan_memory_order mo);
49 __tsan_atomic32 SANITIZER_CDECL
50 __tsan_atomic32_load(const volatile __tsan_atomic32 *a, __tsan_memory_order mo);
51 __tsan_atomic64 SANITIZER_CDECL
52 __tsan_atomic64_load(const volatile __tsan_atomic64 *a, __tsan_memory_order mo);
53 #if __TSAN_HAS_INT128
54 __tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_load(
55 const volatile __tsan_atomic128 *a, __tsan_memory_order mo);
56 #endif
58 void SANITIZER_CDECL __tsan_atomic8_store(volatile __tsan_atomic8 *a,
59 __tsan_atomic8 v,
60 __tsan_memory_order mo);
61 void SANITIZER_CDECL __tsan_atomic16_store(volatile __tsan_atomic16 *a,
62 __tsan_atomic16 v,
63 __tsan_memory_order mo);
64 void SANITIZER_CDECL __tsan_atomic32_store(volatile __tsan_atomic32 *a,
65 __tsan_atomic32 v,
66 __tsan_memory_order mo);
67 void SANITIZER_CDECL __tsan_atomic64_store(volatile __tsan_atomic64 *a,
68 __tsan_atomic64 v,
69 __tsan_memory_order mo);
70 #if __TSAN_HAS_INT128
71 void SANITIZER_CDECL __tsan_atomic128_store(volatile __tsan_atomic128 *a,
72 __tsan_atomic128 v,
73 __tsan_memory_order mo);
74 #endif
76 __tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_exchange(
77 volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);
78 __tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_exchange(
79 volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);
80 __tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_exchange(
81 volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);
82 __tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_exchange(
83 volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);
84 #if __TSAN_HAS_INT128
85 __tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_exchange(
86 volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);
87 #endif
89 __tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_add(
90 volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);
91 __tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_add(
92 volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);
93 __tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_add(
94 volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);
95 __tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_add(
96 volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);
97 #if __TSAN_HAS_INT128
98 __tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_add(
99 volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);
100 #endif
102 __tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_sub(
103 volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);
104 __tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_sub(
105 volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);
106 __tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_sub(
107 volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);
108 __tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_sub(
109 volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);
110 #if __TSAN_HAS_INT128
111 __tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_sub(
112 volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);
113 #endif
115 __tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_and(
116 volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);
117 __tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_and(
118 volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);
119 __tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_and(
120 volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);
121 __tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_and(
122 volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);
123 #if __TSAN_HAS_INT128
124 __tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_and(
125 volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);
126 #endif
128 __tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_or(
129 volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);
130 __tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_or(
131 volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);
132 __tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_or(
133 volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);
134 __tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_or(
135 volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);
136 #if __TSAN_HAS_INT128
137 __tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_or(
138 volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);
139 #endif
141 __tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_xor(
142 volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);
143 __tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_xor(
144 volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);
145 __tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_xor(
146 volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);
147 __tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_xor(
148 volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);
149 #if __TSAN_HAS_INT128
150 __tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_xor(
151 volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);
152 #endif
154 __tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_nand(
155 volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);
156 __tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_nand(
157 volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);
158 __tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_nand(
159 volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);
160 __tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_nand(
161 volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);
162 #if __TSAN_HAS_INT128
163 __tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_nand(
164 volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);
165 #endif
167 int SANITIZER_CDECL __tsan_atomic8_compare_exchange_weak(
168 volatile __tsan_atomic8 *a, __tsan_atomic8 *c, __tsan_atomic8 v,
169 __tsan_memory_order mo, __tsan_memory_order fail_mo);
170 int SANITIZER_CDECL __tsan_atomic16_compare_exchange_weak(
171 volatile __tsan_atomic16 *a, __tsan_atomic16 *c, __tsan_atomic16 v,
172 __tsan_memory_order mo, __tsan_memory_order fail_mo);
173 int SANITIZER_CDECL __tsan_atomic32_compare_exchange_weak(
174 volatile __tsan_atomic32 *a, __tsan_atomic32 *c, __tsan_atomic32 v,
175 __tsan_memory_order mo, __tsan_memory_order fail_mo);
176 int SANITIZER_CDECL __tsan_atomic64_compare_exchange_weak(
177 volatile __tsan_atomic64 *a, __tsan_atomic64 *c, __tsan_atomic64 v,
178 __tsan_memory_order mo, __tsan_memory_order fail_mo);
179 #if __TSAN_HAS_INT128
180 int SANITIZER_CDECL __tsan_atomic128_compare_exchange_weak(
181 volatile __tsan_atomic128 *a, __tsan_atomic128 *c, __tsan_atomic128 v,
182 __tsan_memory_order mo, __tsan_memory_order fail_mo);
183 #endif
185 int SANITIZER_CDECL __tsan_atomic8_compare_exchange_strong(
186 volatile __tsan_atomic8 *a, __tsan_atomic8 *c, __tsan_atomic8 v,
187 __tsan_memory_order mo, __tsan_memory_order fail_mo);
188 int SANITIZER_CDECL __tsan_atomic16_compare_exchange_strong(
189 volatile __tsan_atomic16 *a, __tsan_atomic16 *c, __tsan_atomic16 v,
190 __tsan_memory_order mo, __tsan_memory_order fail_mo);
191 int SANITIZER_CDECL __tsan_atomic32_compare_exchange_strong(
192 volatile __tsan_atomic32 *a, __tsan_atomic32 *c, __tsan_atomic32 v,
193 __tsan_memory_order mo, __tsan_memory_order fail_mo);
194 int SANITIZER_CDECL __tsan_atomic64_compare_exchange_strong(
195 volatile __tsan_atomic64 *a, __tsan_atomic64 *c, __tsan_atomic64 v,
196 __tsan_memory_order mo, __tsan_memory_order fail_mo);
197 #if __TSAN_HAS_INT128
198 int SANITIZER_CDECL __tsan_atomic128_compare_exchange_strong(
199 volatile __tsan_atomic128 *a, __tsan_atomic128 *c, __tsan_atomic128 v,
200 __tsan_memory_order mo, __tsan_memory_order fail_mo);
201 #endif
203 __tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_compare_exchange_val(
204 volatile __tsan_atomic8 *a, __tsan_atomic8 c, __tsan_atomic8 v,
205 __tsan_memory_order mo, __tsan_memory_order fail_mo);
206 __tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_compare_exchange_val(
207 volatile __tsan_atomic16 *a, __tsan_atomic16 c, __tsan_atomic16 v,
208 __tsan_memory_order mo, __tsan_memory_order fail_mo);
209 __tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_compare_exchange_val(
210 volatile __tsan_atomic32 *a, __tsan_atomic32 c, __tsan_atomic32 v,
211 __tsan_memory_order mo, __tsan_memory_order fail_mo);
212 __tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_compare_exchange_val(
213 volatile __tsan_atomic64 *a, __tsan_atomic64 c, __tsan_atomic64 v,
214 __tsan_memory_order mo, __tsan_memory_order fail_mo);
215 #if __TSAN_HAS_INT128
216 __tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_compare_exchange_val(
217 volatile __tsan_atomic128 *a, __tsan_atomic128 c, __tsan_atomic128 v,
218 __tsan_memory_order mo, __tsan_memory_order fail_mo);
219 #endif
221 void SANITIZER_CDECL __tsan_atomic_thread_fence(__tsan_memory_order mo);
222 void SANITIZER_CDECL __tsan_atomic_signal_fence(__tsan_memory_order mo);
224 #ifdef __cplusplus
225 } // extern "C"
226 #endif
228 #endif // TSAN_INTERFACE_ATOMIC_H