commit: 552e864ab334ae8d6546dd2e49bff11c56f302a9 Author: Sergei Trofimovich <slyfox <AT> gentoo <DOT> org> AuthorDate: Fri May 24 06:40:03 2019 +0000 Commit: Sergei Trofimovich <slyfox <AT> gentoo <DOT> org> CommitDate: Fri May 24 06:40:03 2019 +0000 URL: https://gitweb.gentoo.org/proj/gcc-patches.git/commit/?id=552e864a
6.5.0: fix std::pair ABI breakage It will cause immediate pain for existing bianries for 6.5.0 users but longer-term should be more compatible with other gcc versions. Bug: https://gcc.gnu.org/PR87822 Signed-off-by: Sergei Trofimovich <slyfox <AT> gentoo.org> 6.5.0/gentoo/23_all_std_pair_ABI.patch | 47 ++++++++++++++++++++++++++++++++++ 6.5.0/gentoo/README.history | 3 +++ 2 files changed, 50 insertions(+) diff --git a/6.5.0/gentoo/23_all_std_pair_ABI.patch b/6.5.0/gentoo/23_all_std_pair_ABI.patch new file mode 100644 index 0000000..3f79be0 --- /dev/null +++ b/6.5.0/gentoo/23_all_std_pair_ABI.patch @@ -0,0 +1,47 @@ +https://gcc.gnu.org/PR87822 + +From 581b5447f18f4758a55b1fda4f8bf597e9466d40 Mon Sep 17 00:00:00 2001 +From: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> +Date: Wed, 31 Oct 2018 12:29:02 +0000 +Subject: [PATCH] PR libstdc++/87822 fix layout change for nested std::pair + +The introduction of the empty __pair_base base class for PR 86751 +changed the layout of std::pair<std::pair<...>, ...>. The outer pair and +its first member both have a base class of the same type, which cannot +exist at the same address. This causes the first member to be at a +non-zero offset. + +The solution is to make the base class depend on the template +parameters, so that each pair type has a different base class type, +which allows the base classes of the outer pair and its first member to +have the same address. + + PR libstdc++/87822 + * include/bits/stl_pair.h (__pair_base): Change to class template. + (pair): Make base class type depend on template parameters. + * testsuite/20_util/pair/87822.cc: New test. + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@265678 138bc75d-0d04-0410-961f-82ee72b054a4 +--- + libstdc++-v3/include/bits/stl_pair.h | 4 +- + +--- a/libstdc++-v3/include/bits/stl_pair.h ++++ b/libstdc++-v3/include/bits/stl_pair.h +@@ -187,7 +187,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + }; + #endif // C++11 + +- class __pair_base ++ template<typename _U1, typename _U2> class __pair_base + { + #if __cplusplus >= 201103L + template<typename _T1, typename _T2> friend struct pair; +@@ -206,7 +206,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION + */ + template<typename _T1, typename _T2> + struct pair +- : private __pair_base ++ : private __pair_base<_T1, _T2> + { + typedef _T1 first_type; /// @c first_type is the first bound type + typedef _T2 second_type; /// @c second_type is the second bound type diff --git a/6.5.0/gentoo/README.history b/6.5.0/gentoo/README.history index 52b438b..c3c504f 100644 --- a/6.5.0/gentoo/README.history +++ b/6.5.0/gentoo/README.history @@ -1,3 +1,6 @@ +2 TODO + + 23_all_std_pair_ABI.patch + 1 27 Oct 2018 + 01_all_default-fortify-source.patch + 02_all_default-warn-format-security.patch
