------- 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.


-- 


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

Reply via email to