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

Reply via email to