aboutsummaryrefslogtreecommitdiff
path: root/6.5.0
diff options
context:
space:
mode:
authorSergei Trofimovich <slyfox@gentoo.org>2019-05-24 07:40:03 +0100
committerSergei Trofimovich <slyfox@gentoo.org>2019-05-24 07:40:03 +0100
commit552e864ab334ae8d6546dd2e49bff11c56f302a9 (patch)
tree19f4641560a9337a55985333451974bf58292e9b /6.5.0
parent9.1.0: fix format string for es locale, bug #686076 (diff)
downloadgcc-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.patch47
-rw-r--r--6.5.0/gentoo/README.history3
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