Commit d1700aa1 by Jakub Jelinek Committed by Jakub Jelinek

re PR tree-optimization/90303 (ICE in hash_odr_name with fastcall attribute starting with r267359)

	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: r270835
parent 061a799b
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-03 Richard Biener <rguenther@suse.de>
PR tree-optimization/89698
......
......@@ -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)
......
2019-05-03 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/90303
* g++.target/i386/pr90303.C: New test.
2019-05-03 Richard Biener <rguenther@suse.de>
PR tree-optimization/89698
......
// 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;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment