On Tue, Nov 3, 2015 at 11:25 AM, Eric Botcazou <ebotca...@adacore.com> wrote:
>> I suggest to re-instantiate the canonical type checks for the aggregate type
>> case.
>
> OK, thanks, this fixes all the known ICEs so far.
>
> Tested on x86_64-suse-linux, OK for the mainline?

Please instead do the change here:

  /* For aggregates compare only the size.  Accesses to fields do have
     a type information by themselves and thus we only care if we can i.e.
     use the types in move operations.  */
  else if (AGGREGATE_TYPE_P (inner_type)
           && TREE_CODE (inner_type) == TREE_CODE (outer_type))
    return (TYPE_MODE (outer_type) != BLKmode
            || operand_equal_p (TYPE_SIZE (inner_type),
                                TYPE_SIZE (outer_type), 0));

to

      return TYPE_CANONICAL (inner_type)
        && TYPE_CANONICAL (outer_type) == TYPE_CANONICAL (inner_type)

Ok with that change.

Richard.

>
> 2015-11-03  Eric Botcazou  <ebotca...@adacore.com>
>
>         * gimple-expr.c (useless_type_conversion_p): Reinstate type canonical
>         check for aggregate types and beef up comment for mode check.
>
>
> 2015-11-03  Eric Botcazou  <ebotca...@adacore.com>
>
>         * gnat.dg/discr45.adb: Only compile the test.
>
> --
> Eric Botcazou

Reply via email to