This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug lto/41598] bootstrap *using* lto fails
- From: "espindola at google dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 12 Oct 2009 21:02:06 -0000
- Subject: [Bug lto/41598] bootstrap *using* lto fails
- References: <bug-41598-16169@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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