aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Trofimovich <slyfox@gentoo.org>2019-05-17 09:25:33 +0100
committerSergei Trofimovich <slyfox@gentoo.org>2019-05-17 09:25:33 +0100
commit275ab714637a64672c6630cfd744af2c70957d5a (patch)
treea8e7cf9cc6106e323a4b93dc57927fe0c62ed96f
parent9.1.0: cut 1.0 patchset, a copy of 8.3.0 patches (safe backports) (diff)
downloadgcc-patches-275ab714637a64672c6630cfd744af2c70957d5a.tar.gz
gcc-patches-275ab714637a64672c6630cfd744af2c70957d5a.tar.bz2
gcc-patches-275ab714637a64672c6630cfd744af2c70957d5a.zip
9.1.0: fix ICE on incomplete types in IPA
Observed as a crash on games-emulation/pcsx2-1.4.0. Known as https://gcc.gnu.org/PR90303 Bug: https://gcc.gnu.org/PR90303 Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
-rw-r--r--9.1.0/gentoo/26_all_ipa-incomplete.patch52
-rw-r--r--9.1.0/gentoo/README.history3
2 files changed, 55 insertions, 0 deletions
diff --git a/9.1.0/gentoo/26_all_ipa-incomplete.patch b/9.1.0/gentoo/26_all_ipa-incomplete.patch
new file mode 100644
index 0000000..90cbd57
--- /dev/null
+++ b/9.1.0/gentoo/26_all_ipa-incomplete.patch
@@ -0,0 +1,52 @@
+On Gentoo the crash was observed on games-emulation/pcsx2
+https://gcc.gnu.org/PR90303
+
+From b740088ad2f795465023e16671d385df7eb1dae7 Mon Sep 17 00:00:00 2001
+From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Fri, 3 May 2019 07:32:06 +0000
+Subject: [PATCH] PR tree-optimization/90303 * ipa-devirt.c
+ (obj_type_ref_class, get_odr_type): Don't use TYPE_CANONICAL for
+ TYPE_STRUCTURAL_EQUALITY_P types in !in_lto_p mode.
+
+ * g++.target/i386/pr90303.C: New test.
+
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@270835 138bc75d-0d04-0410-961f-82ee72b054a4
+---
+ gcc/ipa-devirt.c | 4 ++--
+ gcc/testsuite/g++.target/i386/pr90303.C | 8 ++++++++
+
+--- a/gcc/ipa-devirt.c
++++ b/gcc/ipa-devirt.c
+@@ -2020,7 +2020,7 @@ obj_type_ref_class (const_tree ref)
+ ref = TREE_VALUE (TYPE_ARG_TYPES (ref));
+ gcc_checking_assert (TREE_CODE (ref) == POINTER_TYPE);
+ tree ret = TREE_TYPE (ref);
+- if (!in_lto_p)
++ if (!in_lto_p && !TYPE_STRUCTURAL_EQUALITY_P (ret))
+ ret = TYPE_CANONICAL (ret);
+ else
+ ret = get_odr_type (ret)->type;
+@@ -2042,7 +2042,7 @@ get_odr_type (tree type, bool insert)
+ int base_id = -1;
+
+ type = TYPE_MAIN_VARIANT (type);
+- if (!in_lto_p)
++ if (!in_lto_p && !TYPE_STRUCTURAL_EQUALITY_P (type))
+ type = TYPE_CANONICAL (type);
+
+ gcc_checking_assert (can_be_name_hashed_p (type)
+--- /dev/null
++++ b/gcc/testsuite/g++.target/i386/pr90303.C
+@@ -0,0 +1,8 @@
++// PR tree-optimization/90303
++// { dg-do compile { target ia32 } }
++// { dg-additional-options "-O2" }
++
++struct A { virtual void foo (); };
++template <class> class B : A {};
++typedef void (__attribute__((fastcall)) F) ();
++B<F> e;
+--
+2.21.0
+
diff --git a/9.1.0/gentoo/README.history b/9.1.0/gentoo/README.history
index 9cd123f..3589de0 100644
--- a/9.1.0/gentoo/README.history
+++ b/9.1.0/gentoo/README.history
@@ -1,3 +1,6 @@
+1.1 TODO
+ + 26_all_ipa-incomplete.patch
+
1.0 03 May 2019
+ 01_all_default-fortify-source.patch
+ 02_all_default-warn-format-security.patch