diff options
author | Sergei Trofimovich <slyfox@gentoo.org> | 2019-05-24 07:40:03 +0100 |
---|---|---|
committer | Sergei Trofimovich <slyfox@gentoo.org> | 2019-05-24 07:40:03 +0100 |
commit | 552e864ab334ae8d6546dd2e49bff11c56f302a9 (patch) | |
tree | 19f4641560a9337a55985333451974bf58292e9b /6.5.0 | |
parent | 9.1.0: fix format string for es locale, bug #686076 (diff) | |
download | gcc-patches-552e864ab334ae8d6546dd2e49bff11c56f302a9.tar.gz gcc-patches-552e864ab334ae8d6546dd2e49bff11c56f302a9.tar.bz2 gcc-patches-552e864ab334ae8d6546dd2e49bff11c56f302a9.zip |
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@gentoo.org>
Diffstat (limited to '6.5.0')
-rw-r--r-- | 6.5.0/gentoo/23_all_std_pair_ABI.patch | 47 | ||||
-rw-r--r-- | 6.5.0/gentoo/README.history | 3 |
2 files changed, 50 insertions, 0 deletions
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 |