On Fri, Jun 5, 2020 at 11:08 AM Jan Hubicka <hubi...@ucw.cz> wrote: > > Hi, > this patch fixes ICE while bulding Firefox on assert in > record_component_aliases which checks that the alias set did not change > while peeling off vector and array types. > This is done so we can translate notice references to pointers. > > If array is TYPE_TYPELESS_STORAGE then it is not true that array type > woud have same alias set as its elements since its alias set is 0, so we > need to watch for this. (And it is safe to miss pointer here once we add > alias set 0 as a component)
OK. > Honza > > * alias.c (record_component_aliases): Watch for typeless storage while > skipping the ARRAY_TREE wrappers. > > diff --git a/gcc/alias.c b/gcc/alias.c > index 49bd7b37966..2bed5e78c62 100644 > --- a/gcc/alias.c > +++ b/gcc/alias.c > @@ -1273,8 +1273,12 @@ record_component_aliases (tree type, alias_set_type > superset) > { > /* VECTOR_TYPE and ARRAY_TYPE share the alias set with their > element type and that type has to be normalized to void > *, > - too, in the case it is a pointer. */ > - while (!canonical_type_used_p (t) && !POINTER_TYPE_P (t)) > + too, in the case it is a pointer. > + An exception is array with TYPE_TYPELESS_STORAGE which > + has alias set 0. */ > + while (!canonical_type_used_p (t) && !POINTER_TYPE_P (t) > + && (!AGGREGATE_TYPE_P (t) > + || !TYPE_TYPELESS_STORAGE (t))) > { > gcc_checking_assert (TYPE_STRUCTURAL_EQUALITY_P (t)); > t = TREE_TYPE (t);