gimple.c (iterative_hash_canonical_type): Skip non-FIELD_DECLs.
authorRichard Guenther <rguenther@suse.de>
Wed, 25 May 2011 10:32:29 +0000 (10:32 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 25 May 2011 10:32:29 +0000 (10:32 +0000)
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

gcc/ChangeLog
gcc/gimple.c

index 7d5f8bd5f0b55a6be72fd03ac26083aee70d4a45..694a0947d1ed5002b8a8a814221b8d7b0750478f 100644 (file)
@@ -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
index 823892cb6218b45a4a1e2a5c757fcda37ea5463f..e13b3ed7883c057f3c782992daadafc41e8031a8 100644 (file)
@@ -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)