https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95282
Bug ID: 95282
Summary: atomic<floating-point>::load in C++20 calls
__atomic_load with a pointer-to-const as the output
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: rs2740 at gmail dot com
Target Milestone: ---
We have
_Fp
load(memory_order __m = memory_order_seq_cst) const noexcept
{ return __atomic_impl::load(&_M_fp, __m); }
which calls
template<typename _Tp>
_GLIBCXX_ALWAYS_INLINE _Tp
load(_Tp* __ptr, memory_order __m) noexcept
{
alignas(_Tp) unsigned char __buf[sizeof(_Tp)];
_Tp* __dest = reinterpret_cast<_Tp*>(__buf);
__atomic_load(__ptr, __dest, int(__m));
return *__dest;
}
Here &_M_fp is a const _Fp*, so _Tp is const-qualified. GCC's __atomic_load
appears to happily tolerate a pointer-to-const dest (which seems rather
dubious), but Clang's doesn't.