gcc/libstdc++-v3/include
Jonathan Wakely 2d8a9ad4a9 libstdc++: Fix aliasing violation in std::shared_ptr [PR104019]
The non-atomic store that sets both reference counts to zero uses a
type-punned pointer, which has undefined behaviour. We could use memset
to write 8 bytes, but we don't actually need it to be a single store
anyway. No other thread can observe the values, that's why it's safe to
use non-atomic stores in the first place. So we can just set each count
to zero.

With -fstore-merging (which is enabled by default at -O2) GCC produces
the same code for this as for memset or the type punned store. Clang
does that store merging even at -O1.

libstdc++-v3/ChangeLog:

	PR libstdc++/104019
	* include/bits/shared_ptr_base.h (_Sp_counted_base<>::_M_release):
	Set members to zero without type punning.
2022-01-23 22:47:00 +00:00
..
backward libstdc++: Add attribute to features deprecated in C++17 [PR91260] 2022-01-14 11:27:50 +00:00
bits libstdc++: Fix aliasing violation in std::shared_ptr [PR104019] 2022-01-23 22:47:00 +00:00
c Update copyright years. 2022-01-03 10:42:10 +01:00
c_compatibility libstdc++: Declare std::c8rtomb and std::mbrtoc8 if provided by the C library 2022-01-18 16:31:02 +00:00
c_global libstdc++: Ensure all feature test macros have type long [PR87193] 2022-01-21 16:07:34 +00:00
c_std libstdc++: Declare std::c8rtomb and std::mbrtoc8 if provided by the C library 2022-01-18 16:31:02 +00:00
debug Update copyright years. 2022-01-03 10:42:10 +01:00
decimal Update copyright years. 2022-01-03 10:42:10 +01:00
experimental libstdc++: Fix for non-constexpr math_errhandling 2022-01-19 13:45:58 +01:00
ext libstdc++: Add attribute to features deprecated in C++17 [PR91260] 2022-01-14 11:27:50 +00:00
parallel Update copyright years. 2022-01-03 10:42:10 +01:00
precompiled Update copyright years. 2022-01-03 10:42:10 +01:00
pstl
std libstdc++: Ensure all feature test macros have type long [PR87193] 2022-01-21 16:07:34 +00:00
tr1 libstdc++: Add attribute to features deprecated in C++17 [PR91260] 2022-01-14 11:27:50 +00:00
tr2 Update copyright years. 2022-01-03 10:42:10 +01:00
Makefile.am libstdc++: Define <stdatomic.h> for C++23 2022-01-18 16:31:02 +00:00
Makefile.in libstdc++: Define <stdatomic.h> for C++23 2022-01-18 16:31:02 +00:00