From: Richard Guenther Date: Fri, 20 May 2011 09:35:44 +0000 (+0000) Subject: re PR middle-end/48849 (SPEC CPU 2000/2006 failed to build with LTO) X-Git-Tag: releases/gcc-4.7.0~6658 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0ea80a160332d4676919e31a7bdff1d8d7100af0;p=thirdparty%2Fgcc.git re PR middle-end/48849 (SPEC CPU 2000/2006 failed to build with LTO) 2011-05-20 Richard Guenther PR middle-end/48849 * gimple.c (gimple_register_canonical_type): Compute TYPE_CANONICAL of pointer types the same way the middle-end does. From-SVN: r173939 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b89b3f9a0b1c..3bd18b854b8f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-05-20 Richard Guenther + + PR middle-end/48849 + * gimple.c (gimple_register_canonical_type): Compute TYPE_CANONICAL + of pointer types the same way the middle-end does. + 2011-05-20 Richard Guenther * gimple.c (gimple_register_type_1): Do not fiddle with diff --git a/gcc/gimple.c b/gcc/gimple.c index 5b03e15a1fc2..4c7fbfc8235e 100644 --- a/gcc/gimple.c +++ b/gcc/gimple.c @@ -4801,6 +4801,25 @@ gimple_register_canonical_type (tree t) if (TYPE_CANONICAL (t)) return TYPE_CANONICAL (t); + /* For pointer and reference types do as the middle-end does - the + canonical type is a pointer to the canonical pointed-to type. */ + if (TREE_CODE (t) == POINTER_TYPE) + { + TYPE_CANONICAL (t) + = build_pointer_type_for_mode + (gimple_register_canonical_type (TREE_TYPE (t)), + TYPE_MODE (t), TYPE_REF_CAN_ALIAS_ALL (t)); + return TYPE_CANONICAL (t); + } + else if (TREE_CODE (t) == REFERENCE_TYPE) + { + TYPE_CANONICAL (t) + = build_reference_type_for_mode + (gimple_register_canonical_type (TREE_TYPE (t)), + TYPE_MODE (t), TYPE_REF_CAN_ALIAS_ALL (t)); + return TYPE_CANONICAL (t); + } + if (gimple_canonical_types == NULL) gimple_canonical_types = htab_create_ggc (16381, gimple_canonical_type_hash, gimple_canonical_type_eq, 0);