[gcc/devel/omp/gcc-9] backport: re PR tree-optimization/90303 (ICE in hash_odr_name with fastcall attribute starting with
Tobias Burnus
burnus@gcc.gnu.org
Thu Mar 5 13:49:00 GMT 2020
https://gcc.gnu.org/g:3f888c29afbe961f776040c459ca2fc9817e46e4
commit 3f888c29afbe961f776040c459ca2fc9817e46e4
Author: Jakub Jelinek <jakub@redhat.com>
Date: Fri May 17 21:48:25 2019 +0200
backport: re PR tree-optimization/90303 (ICE in hash_odr_name with fastcall attribute starting with r267359)
Backported from mainline
2019-05-03 Jakub Jelinek <jakub@redhat.com>
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.
From-SVN: r271349
Diff:
---
gcc/ChangeLog | 9 +++++++++
gcc/ipa-devirt.c | 4 ++--
gcc/testsuite/ChangeLog | 8 ++++++++
gcc/testsuite/g++.target/i386/pr90303.C | 8 ++++++++
4 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 85a5184..d3c8c5e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2019-05-17 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2019-05-03 Jakub Jelinek <jakub@redhat.com>
+
+ 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.
+
2019-05-17 Richard Biener <rguenther@suse.de>
Backport from mainline
diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c
index defa2ed..3e040e2 100644
--- 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)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1f6da94..466f08c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2019-05-17 Jakub Jelinek <jakub@redhat.com>
+
+ Backported from mainline
+ 2019-05-03 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/90303
+ * g++.target/i386/pr90303.C: New test.
+
2019-05-15 Li Jia He <helijia@linux.ibm.com>
Backport from mainline.
diff --git a/gcc/testsuite/g++.target/i386/pr90303.C b/gcc/testsuite/g++.target/i386/pr90303.C
new file mode 100644
index 0000000..2a2dd06
--- /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;
More information about the Gcc-cvs
mailing list