From aec06f6fa8948de6eb8e23028b5ebf4e5fd3e36a Mon Sep 17 00:00:00 2001 From: Richard Biener <rguenther@suse.de> Date: Fri, 12 Oct 2012 12:14:03 +0000 Subject: [PATCH] re PR lto/54898 (ICE in uniquify_nodes, at lto/lto.c:1898) 2012-10-12 Richard Biener <rguenther@suse.de> PR lto/54898 * lto.c (gimple_types_compatible_p_1): Also compare TYPE_MAIN_VARIANT. (iterative_hash_gimple_type): Also hash TYPE_MAIN_VARIANT. From-SVN: r192397 --- gcc/lto/ChangeLog | 7 +++++++ gcc/lto/lto.c | 15 +++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 265922f5d133..49b8af0235df 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,10 @@ +2012-10-12 Richard Biener <rguenther@suse.de> + + PR lto/54898 + * lto.c (gimple_types_compatible_p_1): Also compare + TYPE_MAIN_VARIANT. + (iterative_hash_gimple_type): Also hash TYPE_MAIN_VARIANT. + 2012-10-09 Tobias Burnus <burnus@net-b.de> * lto-lang.c (lto_register_builtin_type): Avoid useless diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index 2b9156aebbaa..7f64daee2192 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -581,6 +581,15 @@ gimple_types_compatible_p_1 (tree t1, tree t2, type_pair_t p, if (!compare_type_names_p (t1, t2)) goto different_types; + /* The main variant of both types should compare equal. */ + if (TYPE_MAIN_VARIANT (t1) != t1 + || TYPE_MAIN_VARIANT (t2) != t2) + { + if (!gtc_visit (TYPE_MAIN_VARIANT (t1), TYPE_MAIN_VARIANT (t2), + state, sccstack, sccstate, sccstate_obstack)) + goto different_types; + } + /* We may not merge typedef types to the same type in different contexts. */ if (TYPE_NAME (t1) @@ -1101,6 +1110,12 @@ iterative_hash_gimple_type (tree type, hashval_t val, && TYPE_P (DECL_CONTEXT (TYPE_NAME (type)))) v = visit (DECL_CONTEXT (TYPE_NAME (type)), state, v, sccstack, sccstate, sccstate_obstack); + + /* Factor in the variant structure. */ + if (TYPE_MAIN_VARIANT (type) != type) + v = visit (TYPE_MAIN_VARIANT (type), state, v, + sccstack, sccstate, sccstate_obstack); + v = iterative_hash_hashval_t (TREE_CODE (type), v); v = iterative_hash_hashval_t (TYPE_QUALS (type), v); v = iterative_hash_hashval_t (TREE_ADDRESSABLE (type), v); -- GitLab