From 3f888c29afbe961f776040c459ca2fc9817e46e4 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 17 May 2019 21:48:25 +0200 Subject: [PATCH] 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 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 --- 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(-) create mode 100644 gcc/testsuite/g++.target/i386/pr90303.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 85a51841830e..d3c8c5e4e94d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2019-05-17 Jakub Jelinek + + Backported from mainline + 2019-05-03 Jakub Jelinek + + 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 Backport from mainline diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index defa2ed3a5dc..3e040e273058 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 1f6da940d34c..466f08ccecfc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2019-05-17 Jakub Jelinek + + Backported from mainline + 2019-05-03 Jakub Jelinek + + PR tree-optimization/90303 + * g++.target/i386/pr90303.C: New test. + 2019-05-15 Li Jia He 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 000000000000..2a2dd06c2b3f --- /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 B : A {}; +typedef void (__attribute__((fastcall)) F) (); +B e; -- 2.47.2