From: Nathan Froyd Date: Mon, 7 Mar 2011 15:32:25 +0000 (+0000) Subject: re PR c/47786 (tree check: expected tree that contains 'decl minimal' structure,... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a19e4d44f1f424afa351d2f4b79a28b8c5ae7cc6;p=gcc.git re PR c/47786 (tree check: expected tree that contains 'decl minimal' structure, have 'tree_list' in c_type_hash, at c-family/c-common.c:4066) PR c/47786 * c-common.c (c_type_hash): Call list_length instead of iterating through DECL_CHAIN. Rename 'i' to 'n_elements'. From-SVN: r170739 --- diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index f89502dfcef..60fc08fa849 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2011-03-07 Nathan Froyd + + PR c/47786 + * c-common.c (c_type_hash): Call list_length instead of iterating + through DECL_CHAIN. Rename 'i' to 'n_elements'. + 2011-02-19 Jakub Jelinek PR c/47809 diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index d696b5f9d8d..f0296612e51 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -4035,7 +4035,7 @@ c_apply_type_quals_to_decl (int type_quals, tree decl) static hashval_t c_type_hash (const void *p) { - int i = 0; + int n_elements; int shift, size; const_tree const t = (const_tree) p; tree t2; @@ -4064,14 +4064,15 @@ c_type_hash (const void *p) default: gcc_unreachable (); } - for (; t2; t2 = DECL_CHAIN (t2)) - i++; + /* FIXME: We want to use a DECL_CHAIN iteration method here, but + TYPE_VALUES of ENUMERAL_TYPEs is stored as a TREE_LIST. */ + n_elements = list_length (t2); /* We might have a VLA here. */ if (TREE_CODE (TYPE_SIZE (t)) != INTEGER_CST) size = 0; else size = TREE_INT_CST_LOW (TYPE_SIZE (t)); - return ((size << 24) | (i << shift)); + return ((size << 24) | (n_elements << shift)); } static GTY((param_is (union tree_node))) htab_t type_hash_table;