aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2011-05-25 10:32:29 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2011-05-25 10:32:29 +0000
commite7cfe2413fe50e22eb2c013415cec9e154d3c391 (patch)
tree5a9f070d5efb8e6683ef1f22cad58c083c40c85c
parentc5235f4c0e40d0905a5183e6628ad0e08b836005 (diff)
downloadgcc-e7cfe2413fe50e22eb2c013415cec9e154d3c391.zip
gcc-e7cfe2413fe50e22eb2c013415cec9e154d3c391.tar.gz
gcc-e7cfe2413fe50e22eb2c013415cec9e154d3c391.tar.bz2
gimple.c (iterative_hash_canonical_type): Skip non-FIELD_DECLs.
2011-05-25 Richard Guenther <rguenther@suse.de> * gimple.c (iterative_hash_canonical_type): Skip non-FIELD_DECLs. (gimple_canonical_types_compatible_p): Likewise. From-SVN: r174181
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/gimple.c16
2 files changed, 17 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7d5f8bd..694a094 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2011-05-25 Richard Guenther <rguenther@suse.de>
+
+ * gimple.c (iterative_hash_canonical_type): Skip non-FIELD_DECLs.
+ (gimple_canonical_types_compatible_p): Likewise.
+
2011-05-25 Jan Hubicka <jh@suse.cz>
PR middle-end/49062
diff --git a/gcc/gimple.c b/gcc/gimple.c
index 823892c..e13b3ed 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -4376,10 +4376,11 @@ iterative_hash_canonical_type (tree type, hashval_t val)
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 +4689,13 @@ gimple_canonical_types_compatible_p (tree t1, tree t2)
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)