------- Comment #13 from rguenther at suse dot de  2009-10-12 21:03 -------
Subject: Re:  bootstrap *using* lto fails

On Mon, 12 Oct 2009, espindola at google dot com wrote:

> ------- Comment #12 from espindola at google dot com  2009-10-12 21:02 -------
> (In reply to comment #9)
> > Ok, so the issue here is that we have
> > 
> >   typedef struct VEC_constructor_elt_gc { } VEC_constructor_elt_gc;
> > 
> > vs.
> > 
> >   typedef struct VEC_constructor_elt_gcx { } VEC_constructor_elt_gc;
> > 
> > which causes us to not merge the two union tree_node types which are
> > 
> >   typedef union tree_node *tree;
> >   union tree_node {
> >     tree * use;
> >     VEC_constructor_elt_gc *elts;
> >   };
> > 
> > And in the end because we look through typedefs here:
> > 
> >   static hashval_t
> >   iterative_hash_type_name (tree type, hashval_t v)
> >   {
> >     tree name = TYPE_NAME (TYPE_MAIN_VARIANT (type));
> > 
> > Now this is necessary - we'd want to merge
> > 
> >   union tree_node {
> >     tree * use;
> >     struct VEC_constructor_elt_gc *elts;
> >   };
> > 
> > as well.
> > 
> > So - this cannot be fixed by type merging, but instead together with what
> > we need to fix TBAA issues for non-merged types we have to try to cover
> > these issues as well.
> 
> I am a bit confused why we cannot merge the types.
> 
> If using structural equality, "struct VEC_constructor_elt_gc" and "struct
> VEC_constructor_elt_gcx" should be equivalent since they are both {}. With
> these being equivalent, the two typedefs defining VEC_constructor_elt_gc are
> equivalent and finally the two "union tree_node" also are.

We're not really using structural equality.  I have patches to go
both ways (more structural equality and less), both cause some
regressions.  So I'm digging somewhat further for now.

Richard.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41598

Reply via email to