This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Ignore TYPE_DECLs for canonical type compute in LTO
- From: Richard Guenther <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 25 May 2011 12:29:02 +0200 (CEST)
- Subject: [PATCH] Ignore TYPE_DECLs for canonical type compute in LTO
Just figured that we'd get TYPE_DECLs and FUNCTION_DECLs in aggregate
types. But we should treat layout-compatible structs as same,
regardless of the above.
LTO profile-bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
Richard.
2011-05-25 Richard Guenther <rguenther@suse.de>
* gimple.c (iterative_hash_canonical_type): Skip non-FIELD_DECLs.
(gimple_canonical_types_compatible_p): Likewise.
Index: gcc/gimple.c
===================================================================
--- gcc/gimple.c (revision 174118)
+++ gcc/gimple.c (working copy)
@@ -4376,10 +4382,11 @@ iterative_hash_canonical_type (tree type
tree f;
for (f = TYPE_FIELDS (type), nf = 0; f; f = TREE_CHAIN (f))
- {
- v = iterative_hash_canonical_type (TREE_TYPE (f), v);
- nf++;
- }
+ if (TREE_CODE (f) == FIELD_DECL)
+ {
+ v = iterative_hash_canonical_type (TREE_TYPE (f), v);
+ nf++;
+ }
v = iterative_hash_hashval_t (nf, v);
}
@@ -4688,6 +4695,13 @@ gimple_canonical_types_compatible_p (tre
f1 && f2;
f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
{
+ /* Skip non-fields. */
+ while (f1 && TREE_CODE (f1) != FIELD_DECL)
+ f1 = TREE_CHAIN (f1);
+ while (f2 && TREE_CODE (f2) != FIELD_DECL)
+ f2 = TREE_CHAIN (f2);
+ if (!f1 || !f2)
+ break;
/* The fields must have the same name, offset and type. */
if (DECL_NONADDRESSABLE_P (f1) != DECL_NONADDRESSABLE_P (f2)
|| !gimple_compare_field_offset (f1, f2)