aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2005-03-16 02:20:05 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2005-03-16 02:20:05 +0000
commit0ebfd2c928fda823acdd4b5b073a84e5ce92ba39 (patch)
tree3750c12eff0b65397727b2016b257f02c6c89e51 /gcc
parentc79e602b6302889036c04a7ca530afc5ae97e053 (diff)
downloadgcc-0ebfd2c928fda823acdd4b5b073a84e5ce92ba39.zip
gcc-0ebfd2c928fda823acdd4b5b073a84e5ce92ba39.tar.gz
gcc-0ebfd2c928fda823acdd4b5b073a84e5ce92ba39.tar.bz2
re PR tree-optimization/17454 (ICE with --enable-checking=fold)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/fold-const.c7
-rw-r--r--gcc/tree.c4
3 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dc9540c..cb2ec2a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
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
op1 whilst expanding the signed widenening multiply variant.
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 6a00abe..13e9153 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -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);
diff --git a/gcc/tree.c b/gcc/tree.c
index 0a99598..b1c2458 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -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 *));