diff options
author | Richard Guenther <rguenther@suse.de> | 2011-05-25 10:32:29 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2011-05-25 10:32:29 +0000 |
commit | e7cfe2413fe50e22eb2c013415cec9e154d3c391 (patch) | |
tree | 5a9f070d5efb8e6683ef1f22cad58c083c40c85c | |
parent | c5235f4c0e40d0905a5183e6628ad0e08b836005 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/gimple.c | 16 |
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) |