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);

Reply via email to