[Bug libstdc++/85930] [8/9 Regression] Misaligned reference created in shared_ptr_base.h with -fno-rtti
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85930 Jonathan Wakely changed: What|Removed |Added CC||semi1 at posteo dot de --- Comment #11 from Jonathan Wakely --- *** Bug 88177 has been marked as a duplicate of this bug. ***
[Bug libstdc++/85930] [8/9 Regression] Misaligned reference created in shared_ptr_base.h with -fno-rtti
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85930 Jonathan Wakely changed: What|Removed |Added Status|REOPENED|RESOLVED Resolution|--- |FIXED Target Milestone|8.2 |8.3 Summary|[8 Regression] Misaligned |[8/9 Regression] Misaligned |reference created in|reference created in |shared_ptr_base.h with |shared_ptr_base.h with |-fno-rtti |-fno-rtti --- Comment #10 from Jonathan Wakely --- Should be really fixed for GCC 8.3
[Bug libstdc++/85930] [8/9 Regression] Misaligned reference created in shared_ptr_base.h with -fno-rtti
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85930 --- Comment #7 from Jonathan Wakely --- Author: redi Date: Thu Nov 22 13:42:39 2018 New Revision: 266376 URL: https://gcc.gnu.org/viewcvs?rev=266376=gcc=rev Log: PR libstdc++/87520 Always pass type-punned type_info reference The implementations of std::make_shared for -frtti and -fno-rtti are not compatible, because they pass different arguments to _Sp_counted_ptr_inplace::_M_get_deleter and so can't interoperate. Either the argument doesn't match the expected value, and so the shared_ptr::_M_ptr member is never set, or the type-punned reference is treated as a real std::type_info object and gets dereferenced. This patch removes the differences between -frtti and -fno-rtti, so that typeid is never used, and the type-punned reference is used in both cases. For backwards compatibility with existing code that passes typeid(_Sp_make_shared_tag) that still needs to be handled, but only after checking that the argument is not the type-punned reference (so it's safe to treat as a real std::type_info object). The reference is bound to an object of literal type, so that it doesn't need a guard variable to make its initialization thread-safe. This patch also fixes 87520 by ensuring that the type-punned reference is bound to "a region of storage of suitable size and alignment to contain an object of the reference's type" (as per the proposed resolution of Core DR 453). If all objects are built with the fixed version of GCC then -frtti and -fno-rtti can be mixed freely and std::make_shared will work correctly. If some objects are built with unfixed GCC versions then problems can still arise, depending on which template instantiations are kept by the linker. PR libstdc++/85930 PR libstdc++/87520 * include/bits/shared_ptr_base.h (_Sp_make_shared_tag::_S_ti) [__cpp_rtti]: Define even when RTTI is enabled. Use array of sizeof(type_info) so that type-punned reference binds to an object of the correct size as well as correct alignment. (_Sp_counted_ptr_inplace::_M_get_deleter) [__cpp_rtti]: Check for _S_ti() reference even when RTTI is enabled. (__shared_ptr(_Sp_make_shared_tag, const _Alloc&, _Args&&...)) [__cpp_rtti]: Pass _S_ti() instead of typeid(_Sp_make_shared_tag). Modified: trunk/libstdc++-v3/ChangeLog trunk/libstdc++-v3/include/bits/shared_ptr_base.h
[Bug libstdc++/85930] [8/9 Regression] Misaligned reference created in shared_ptr_base.h with -fno-rtti
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85930 Jonathan Wakely changed: What|Removed |Added Status|RESOLVED|REOPENED URL||https://bugzilla.redhat.com ||/show_bug.cgi?id=1643318 Resolution|FIXED |--- --- Comment #6 from Jonathan Wakely --- Clang's UBsan still complains about this, because the object at the type-punned address is not large enough to be a type_info.
[Bug libstdc++/85930] [8/9 Regression] Misaligned reference created in shared_ptr_base.h with -fno-rtti
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85930 Jonathan Wakely changed: What|Removed |Added Status|ASSIGNED|RESOLVED Resolution|--- |FIXED --- Comment #5 from Jonathan Wakely --- Fixed for 8.2
[Bug libstdc++/85930] [8/9 Regression] Misaligned reference created in shared_ptr_base.h with -fno-rtti
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85930 --- Comment #4 from Jonathan Wakely --- Author: redi Date: Mon Jun 4 22:34:39 2018 New Revision: 261174 URL: https://gcc.gnu.org/viewcvs?rev=261174=gcc=rev Log: PR libstdc++/85930 fix misaligned reference PR libstdc++/85930 * include/bits/shared_ptr_base.h [!__cpp_rtti]: Include unconditionally. Remove redundant declaration. [!__cpp_rtti] (_Sp_make_shared_tag::_S_ti): Align the static variable correctly. Modified: branches/gcc-8-branch/libstdc++-v3/ChangeLog branches/gcc-8-branch/libstdc++-v3/include/bits/shared_ptr_base.h
[Bug libstdc++/85930] [8/9 Regression] Misaligned reference created in shared_ptr_base.h with -fno-rtti
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85930 --- Comment #3 from Jonathan Wakely --- Author: redi Date: Mon Jun 4 21:38:42 2018 New Revision: 261172 URL: https://gcc.gnu.org/viewcvs?rev=261172=gcc=rev Log: PR libstdc++/85930 fix misplaced alignment-specifier PR libstdc++/85930 * include/bits/shared_ptr_base.h [!__cpp_rtti]: Include unconditionally. Remove redundant declaration. [!__cpp_rtti] (_Sp_make_shared_tag::_S_ti): Fix location of alignment-specifier. Modified: trunk/libstdc++-v3/ChangeLog trunk/libstdc++-v3/include/bits/shared_ptr_base.h
[Bug libstdc++/85930] [8/9 Regression] Misaligned reference created in shared_ptr_base.h with -fno-rtti
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85930 --- Comment #2 from Jonathan Wakely --- Author: redi Date: Mon Jun 4 16:07:35 2018 New Revision: 261155 URL: https://gcc.gnu.org/viewcvs?rev=261155=gcc=rev Log: PR libstdc++/85930 fix misaligned reference PR libstdc++/85930 * include/bits/shared_ptr_base.h (_Sp_make_shared_tag::_S_ti): Align the static variable correctly. Modified: trunk/libstdc++-v3/ChangeLog trunk/libstdc++-v3/include/bits/shared_ptr_base.h
[Bug libstdc++/85930] [8/9 Regression] Misaligned reference created in shared_ptr_base.h with -fno-rtti
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85930 Jonathan Wakely changed: What|Removed |Added Status|NEW |ASSIGNED Known to work||7.3.0 Assignee|unassigned at gcc dot gnu.org |redi at gcc dot gnu.org Target Milestone|--- |8.2 Summary|Misaligned reference|[8/9 Regression] Misaligned |created in |reference created in |shared_ptr_base.h with |shared_ptr_base.h with |-fno-rtti |-fno-rtti Known to fail||8.1.0, 9.0