<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/72893>72893</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Memory order not respected for `atomic<long double>::load`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
compiler-rt
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
huixie90
</td>
</tr>
</table>
<pre>
This is coming up when we try to implement `fetch_add` and `fetch_sub` for `std::atomic<long double>`.
For the following code
```cpp
using T = long double;
int main()
{
std::atomic<T> a = 0.0;
int nonAtomic = 0;
std::thread t([&]{
while(a.load(std::memory_order_acquire) != T(1.0)){
std::this_thread::yield();
}
assert(nonAtomic == 42);
});
nonAtomic = 42;
a.store(T(1.0), std::memory_order_release);
t.join();
}
```
https://godbolt.org/z/z5P11zznG
When run with TSAN, we can see the data race of read/write `nonAtomic`, meaning the acquire/release is not working.
Note that when `T` is `double`, this is working.
in `std::atomic`, we simply call the builtin `__c11_atomic_load`
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx0VN1yszYQfZrlZieMEAbDBRdO_NGrftOZeqaXHoHWRqlAriRKnafvCIh_0jQT_y17dveszpFwTp0HogqyV8j2kRh9Z2zVjeofRSWLGiOv1aFTDpXD1vRqOON4wamjASdCb6_oDar-oqmnwSPk7ES-7Y5CSsgZikHeY25sQuxkbIg5LyHdQboT3vSqhfRNm-GM0oyNJkh_QM5iYHtgu-W9NhZ9R3gyWpspDNIaSY8ZkLPlv71clsjoQt4BId3jU_XXR5waPPZCDcAL4OX6ZLum4H_nPED6A8VclMXsVgwRMZQazLCbU5eML81C1q2k7ywJiT50zl6B55Dt753Xv6lTmoAXItZGSODFDd5Tb-z1aKwkexTtX6OyBLxE4ElofQBeJDELnHj5DSHfKXdcRlgCV0VarltIv0wB2_0TDeEc2TD4E93QdsO_4gP2IXR_8LyqDb-jROy8CWyKRxZv-D13S5qEo6e-Pn43tzO9tb6x-NTK8rPz_uJCYV4Dr89GNkb72Ngz8PojvLLfkuTjY_jlkcEfwQV2HHBSvsPD77ufYcKJsBUDOqJZrlJ4gVa0hOaE86p5PVnlKXjgxj8Mwt-wJzEExQbg7TzrlV2w4GA8Tsb-qYbzao6fxodGwi-mhJwdgsmUC19XuS_F_WrjTzw-e-A7Ty7AidAFi1-xFVrPwzWj0n7BHI9tkhwXwHFW6OdSI1mlskxLEVGVbBnLWLLJi6irtjkvOEkmiiJLyyLNMilZcZKb5tTyvEwiVXHG0yThLNmmCSvi9JRnWZ4S5XKTFLmEDaNeKB1r_XcfzilSzo1UbXlRppEWDWk332mct6a_KE32JaiVh0vOVgH10oxnBxumlfPuXscrr6n6dVYXzuqal27JXaj1JD-vr_-7teb1rWuIRqurL9JSvhubuDU98Do0XT9eLta8U-uB1zMTB7yeyfwbAAD__0pwppQ">