2011-05-20 Richard Guenther <rguenther@suse.de>
+ 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 <rguenther@suse.de>
+
* gimple.c (gimple_register_type_1): Do not fiddle with
main-variant or pointer-to chains. Delay all fixup to
uniquify_nodes.
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);