On Thu, Oct 06, 2011 at 03:28:02PM -0700, Richard Henderson wrote:
> The layout of trees has been restructured since anyone has tried
> to enable fold checking (or =all checking).  One of the types
> referenced, struct tree_type, doesn't exist anymore.
> 
> Jakub, I was hoping you could remember exactly what you were
> trying to test for with this assert.  It looks terribly arbitrary
> after all this time...

4.3 was using:
  struct tree_function_decl buf;
  int i, len;

recursive_label:

  gcc_assert ((sizeof (struct tree_exp) + 5 * sizeof (tree)
               <= sizeof (struct tree_function_decl))
              && sizeof (struct tree_type) <= sizeof (struct 
tree_function_decl));

As 4.4+ uses union tree_node buf; instead, I guess the
sizeof (struct tree_type) <= check is pointless.
Currently buf is used just for decls and types, so union tree_node buf
should be big enough for everything, apparently in 3.4
buf was used for decls, types and SAVE_EXPR (which had 3 operands
at that point, dunno if 5 was just tiny bit bigger just in case).

BTW, this is likely PR other/49752.

> --- a/gcc/fold-const.c
> +++ b/gcc/fold-const.c
> @@ -13880,11 +13880,7 @@ fold_checksum_tree (const_tree expr, struct md5_ctx 
> *ctx, htab_t ht)
>    union tree_node buf;
>    int i, len;
>  
> -recursive_label:
> -
> -  gcc_assert ((sizeof (struct tree_exp) + 5 * sizeof (tree)
> -            <= sizeof (struct tree_function_decl))
> -           && sizeof (struct tree_type) <= sizeof (struct 
> tree_function_decl));
> + recursive_label:
>    if (expr == NULL)
>      return;
>    slot = (void **) htab_find_slot (ht, expr, INSERT);


        Jakub

Reply via email to