From 46c5394b31bbab3d52c4130df31d77a76a6966a8 Mon Sep 17 00:00:00 2001 From: Daniel Berlin Date: Mon, 29 Aug 2005 00:12:19 +0000 Subject: [PATCH] re PR middle-end/22455 (ICE tree check: expected function_decl, have type_decl in fold_checksum_tree, at fold-const.c:10282) 2005-08-28 Daniel Berlin Fix PR middle-end/22455 * fold-const.c (fold_checksum_tree): Adjust for now-largest tree size. Checksum only the parts of the tree that exist for the tree code. From-SVN: r103586 --- gcc/ChangeLog | 7 +++++++ gcc/fold-const.c | 19 ++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f5452ea8d6e..b2297dd2981 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-08-28 Daniel Berlin + + Fix PR middle-end/22455 + + * fold-const.c (fold_checksum_tree): Adjust for now-largest tree size. + Checksum only the parts of the tree that exist for the tree code. + 2005-08-28 Dale Johannesen * config/i386/i386.c (nocona_cost): Increase MOVE_RATIO. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 88fbd0c13c6..2f024b42e02 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -10277,14 +10277,14 @@ fold_checksum_tree (tree expr, struct md5_ctx *ctx, htab_t ht) { void **slot; enum tree_code code; - char buf[sizeof (struct tree_decl_non_common)]; + char buf[sizeof (struct tree_function_decl)]; int i, len; recursive_label: gcc_assert ((sizeof (struct tree_exp) + 5 * sizeof (tree) - <= sizeof (struct tree_decl_non_common)) - && sizeof (struct tree_type) <= sizeof (struct tree_decl_non_common)); + <= sizeof (struct tree_function_decl)) + && sizeof (struct tree_type) <= sizeof (struct tree_function_decl)); if (expr == NULL) return; slot = htab_find_slot (ht, expr, INSERT); @@ -10375,13 +10375,18 @@ recursive_label: fold_checksum_tree (DECL_SIZE_UNIT (expr), ctx, ht); fold_checksum_tree (DECL_NAME (expr), ctx, ht); fold_checksum_tree (DECL_CONTEXT (expr), ctx, ht); - fold_checksum_tree (DECL_ARGUMENTS (expr), ctx, ht); - fold_checksum_tree (DECL_RESULT_FLD (expr), ctx, ht); fold_checksum_tree (DECL_INITIAL (expr), ctx, ht); fold_checksum_tree (DECL_ABSTRACT_ORIGIN (expr), ctx, ht); - fold_checksum_tree (DECL_SECTION_NAME (expr), ctx, ht); fold_checksum_tree (DECL_ATTRIBUTES (expr), ctx, ht); - fold_checksum_tree (DECL_VINDEX (expr), ctx, ht); + if (CODE_CONTAINS_STRUCT (TREE_CODE (expr), TS_DECL_WITH_VIS)) + fold_checksum_tree (DECL_SECTION_NAME (expr), ctx, ht); + + if (CODE_CONTAINS_STRUCT (TREE_CODE (expr), TS_DECL_NON_COMMON)) + { + fold_checksum_tree (DECL_VINDEX (expr), ctx, ht); + fold_checksum_tree (DECL_RESULT_FLD (expr), ctx, ht); + fold_checksum_tree (DECL_ARGUMENT_FLD (expr), ctx, ht); + } break; case tcc_type: if (TREE_CODE (expr) == ENUMERAL_TYPE) -- 2.30.2