On Fri, Jun 5, 2020 at 11:08 AM Jan Hubicka <[email protected]> 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);