On Tue, May 24, 2011 at 7:34 PM, Nathan Froyd <froy...@codesourcery.com> wrote:
> `0On Mon, May 23, 2011 at 04:58:06PM +0200, Richard Guenther wrote:
>> On Mon, May 23, 2011 at 4:18 PM, Nathan Froyd <froy...@codesourcery.com> 
>> wrote:
>> > On 05/17/2011 11:31 AM, Nathan Froyd wrote:
>> >> On 05/10/2011 04:18 PM, Nathan Froyd wrote:
>> >>> On 03/10/2011 11:23 PM, Nathan Froyd wrote:
>> >>>> After all that, we can finally make tree_exp inherit from typed_tree.
>> >>>> Quite anticlimatic.
>> >>>
>> >>> Ping.  http://gcc.gnu.org/ml/gcc-patches/2011-03/msg00559.html
>> >>
>> >> Ping^2.
>> >
>> > Ping^3 to put it in Richi's INBOX. ;)
>>
>> Ok ;)
>>
>> Please check for sizeof () uses of the structs you touched sofar.
>> ISTR a bug about fold-checking.
>
> That doesn't apply here, because I'm not renaming the struct.  But I did
> find some problems with LTO when I was rebootstrapping prior to
> committing; not sure how I missed these the first time through, maybe I
> was mistakenly compiling without LTO support.  Since we now have things
> being dumped to LTO that don't have TREE_CHAIN, we need to take care to
> not access TREE_CHAIN on such things, which the patch below does.
>
> Tested on x86_64-unknown-linux-gnu.  OK to commit?

Ok.  Please see if you can adjust the lto-streamer-in/out.c machinery
to consistently handle the new TS_ classes.

Thanks,
Richard.

> -Nathan
>
> gcc/
>        * tree.h (struct tree_exp): Inherit from struct tree_typed.
>        * tree.c (initialize_tree_contains_struct): Mark TS_EXP as TS_TYPED
>        instead of TS_COMMON.
>
> gcc/lto/
>        * lto.c (lto_ft_typed): New function.
>        (lto_ft_common): Call it.
>        (lto_ft_constructor): Likewise.
>        (lto_ft_expr): Likewise.
>        (lto_fixup_prevailing_decls): Check for TS_COMMON before accessing
>        TREE_CHAIN.
>
> diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
> index d64ba18..1067b51 100644
> --- a/gcc/lto/lto.c
> +++ b/gcc/lto/lto.c
> @@ -254,14 +254,20 @@ remember_with_vars (tree t)
>
>  static void lto_fixup_types (tree);
>
> -/* Fix up fields of a tree_common T.  */
> +/* Fix up fields of a tree_typed T.  */
>
>  static void
> -lto_ft_common (tree t)
> +lto_ft_typed (tree t)
>  {
> -  /* Fixup our type.  */
>   LTO_FIXUP_TREE (TREE_TYPE (t));
> +}
> +
> +/* Fix up fields of a tree_common T.  */
>
> +static void
> +lto_ft_common (tree t)
> +{
> +  lto_ft_typed (t);
>   LTO_FIXUP_TREE (TREE_CHAIN (t));
>  }
>
> @@ -398,7 +404,7 @@ lto_ft_constructor (tree t)
>   unsigned HOST_WIDE_INT idx;
>   constructor_elt *ce;
>
> -  LTO_FIXUP_TREE (TREE_TYPE (t));
> +  lto_ft_typed (t);
>
>   for (idx = 0;
>        VEC_iterate(constructor_elt, CONSTRUCTOR_ELTS (t), idx, ce);
> @@ -415,7 +421,7 @@ static void
>  lto_ft_expr (tree t)
>  {
>   int i;
> -  lto_ft_common (t);
> +  lto_ft_typed (t);
>   for (i = TREE_OPERAND_LENGTH (t) - 1; i >= 0; --i)
>     LTO_FIXUP_TREE (TREE_OPERAND (t, i));
>  }
> @@ -2029,7 +2035,8 @@ lto_fixup_prevailing_decls (tree t)
>  {
>   enum tree_code code = TREE_CODE (t);
>   LTO_NO_PREVAIL (TREE_TYPE (t));
> -  LTO_NO_PREVAIL (TREE_CHAIN (t));
> +  if (CODE_CONTAINS_STRUCT (code, TS_COMMON))
> +    LTO_NO_PREVAIL (TREE_CHAIN (t));
>   if (DECL_P (t))
>     {
>       LTO_NO_PREVAIL (DECL_NAME (t));
> diff --git a/gcc/tree.c b/gcc/tree.c
> index 3357d84..9cc99fe 100644
> --- a/gcc/tree.c
> +++ b/gcc/tree.c
> @@ -380,6 +380,7 @@ initialize_tree_contains_struct (void)
>        case TS_COMPLEX:
>        case TS_SSA_NAME:
>        case TS_CONSTRUCTOR:
> +       case TS_EXP:
>          MARK_TS_TYPED (code);
>          break;
>
> @@ -388,7 +389,6 @@ initialize_tree_contains_struct (void)
>        case TS_TYPE_COMMON:
>        case TS_LIST:
>        case TS_VEC:
> -       case TS_EXP:
>        case TS_BLOCK:
>        case TS_BINFO:
>        case TS_STATEMENT_LIST:
> diff --git a/gcc/tree.h b/gcc/tree.h
> index 805fe06..142237f 100644
> --- a/gcc/tree.h
> +++ b/gcc/tree.h
> @@ -1917,7 +1917,7 @@ enum omp_clause_default_kind
>   (OMP_CLAUSE_SUBCODE_CHECK (NODE, 
> OMP_CLAUSE_DEFAULT)->omp_clause.subcode.default_kind)
>
>  struct GTY(()) tree_exp {
> -  struct tree_common common;
> +  struct tree_typed typed;
>   location_t locus;
>   tree block;
>   tree GTY ((special ("tree_exp"),
>

Reply via email to