[Bug lto/41598] bootstrap *using* lto fails
rguenth at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Sun Oct 11 15:13:00 GMT 2009
------- Comment #9 from rguenth at gcc dot gnu dot org 2009-10-11 15:13 -------
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.
Now - a C language lawyer could chime in here and tell us if the above
invokes undefined behavior. Short:
typedef struct A {} T;
typedef struct B {} T;
is this valid cross translation-unit if T is used across units?
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
Last reconfirmed|0000-00-00 00:00:00 |2009-10-11 15:13:42
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41598
More information about the Gcc-bugs
mailing list