]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/17454 (ICE with --enable-checking=fold)
authorRoger Sayle <roger@eyesopen.com>
Wed, 16 Mar 2005 02:20:05 +0000 (02:20 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Wed, 16 Mar 2005 02:20:05 +0000 (02:20 +0000)
PR tree-optimization/17454
* tree.c (tree_size): Add case for TREE_BINFO.
* fold-const.c (fold_checksum_tree): Only clear the overloaded
field TYPE_CACHED_VALUES if TYPE_CACHED_VALUES_P is set.

From-SVN: r96548

gcc/ChangeLog
gcc/fold-const.c
gcc/tree.c

index dc9540c93ea86f1a023ac5017bb28774104d2438..cb2ec2a291cdb4e8ef74ff5524b34c5df1cff1f3 100644 (file)
@@ -1,3 +1,10 @@
+2005-03-15  Roger Sayle  <roger@eyesopen.com>
+
+       PR tree-optimization/17454
+       * tree.c (tree_size): Add case for TREE_BINFO.
+       * fold-const.c (fold_checksum_tree): Only clear the overloaded
+       field TYPE_CACHED_VALUES if TYPE_CACHED_VALUES_P is set.
+
 2005-03-15  Roger Sayle  <roger@eyesopen.com>
 
        * optabs.c (expand_doubleword_mult): Avoid clobbering op0 and
index 6a00abe423b1d1df1fbac5d65eae47b13d85c70e..13e91530cb05438de10a09f263fb5c3bd0545620 100644 (file)
@@ -10049,8 +10049,11 @@ fold_checksum_tree (tree expr, struct md5_ctx *ctx, htab_t ht)
       expr = (tree) buf;
       TYPE_POINTER_TO (expr) = NULL;
       TYPE_REFERENCE_TO (expr) = NULL;
-      TYPE_CACHED_VALUES_P (expr) = 0;
-      TYPE_CACHED_VALUES (expr) = NULL;
+      if (TYPE_CACHED_VALUES_P (expr))
+       {
+         TYPE_CACHED_VALUES_P (expr) = 0;
+         TYPE_CACHED_VALUES (expr) = NULL;
+       }
     }
   md5_process_bytes (expr, tree_size (expr), ctx);
   fold_checksum_tree (TREE_TYPE (expr), ctx, ht);
index 0a99598123ad595ec2bc58f62d9c9664450cd6b0..b1c2458973bdc72f16b71868ec18bec9f23fa670 100644 (file)
@@ -243,6 +243,10 @@ tree_size (tree node)
       return (sizeof (struct tree_phi_node)
              + (PHI_ARG_CAPACITY (node) - 1) * sizeof (struct phi_arg_d));
 
+    case TREE_BINFO:
+      return (offsetof (struct tree_binfo, base_binfos)
+             + VEC_embedded_size (tree, BINFO_N_BASE_BINFOS (node)));
+
     case TREE_VEC:
       return (sizeof (struct tree_vec)
              + (TREE_VEC_LENGTH (node) - 1) * sizeof(char *));