Commit c3a75a09 by Eric Botcazou Committed by Pierre-Marie de Rodat

[Ada] Get rid of useless temporary for slice in overaligned record type

This fixes a recent code quality regression for targets that do not
require the strict alignment of memory accesses: the compiler would
generate a useless temporary for a slice of an array component in an
overaligned record type.

Running these commands:

  gcc -c p.adb -gnatws -gnatD
  grep loop p.adb.dg

On the following sources:

procedure P (N : Positive) is

  type Rec1 is record
    I : Integer;
  end record;

  type Arr is array (Positive range <>) of Rec1;

  type Rec2 is record
    A : Arr (1 .. 128);
  end record;
  for Rec2'Alignment use 8;

  procedure Proc (A : Arr) is
  begin
    null;
  end;

  R : Rec2;

begin
  Proc (R.A (1 .. N));
end;

Should execute silently.

2019-09-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_util.adb (Is_Possibly_Unaligned_Slice): Do not return true
	on pure alignment considerations if the target does not require
	the strict alignment of memory accesses.

From-SVN: r275956
parent 87cd385f
2019-09-19 Eric Botcazou <ebotcazou@adacore.com>
* exp_util.adb (Is_Possibly_Unaligned_Slice): Do not return true
on pure alignment considerations if the target does not require
the strict alignment of memory accesses.
2019-09-19 Eric Botcazou <ebotcazou@adacore.com>
* sem_ch12.adb (Check_Private_View): Add a comment to indicate
future work.
......
......@@ -8692,9 +8692,11 @@ package body Exp_Util is
-- We are definitely in trouble if the record in question
-- has an alignment, and either we know this alignment is
-- inconsistent with the alignment of the slice, or we don't
-- know what the alignment of the slice should be.
-- know what the alignment of the slice should be. But this
-- really matters only if the target has strict alignment.
if Known_Alignment (Ptyp)
if Target_Strict_Alignment
and then Known_Alignment (Ptyp)
and then (Unknown_Alignment (Styp)
or else Alignment (Styp) > Alignment (Ptyp))
then
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment