diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2019-09-19 08:14:47 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2019-09-19 08:14:47 +0000 |
commit | c3a75a09b8424c192b32a39fa273d27db5b9c039 (patch) | |
tree | 02248dbe080cb8039d06d8da007945feaac10b45 /gcc/ada/gcc-interface/misc.c | |
parent | 87cd385fa5dad3a0e5d144e08670c7fdd85fe2ef (diff) | |
download | gcc-c3a75a09b8424c192b32a39fa273d27db5b9c039.zip gcc-c3a75a09b8424c192b32a39fa273d27db5b9c039.tar.gz gcc-c3a75a09b8424c192b32a39fa273d27db5b9c039.tar.bz2 |
[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
Diffstat (limited to 'gcc/ada/gcc-interface/misc.c')
0 files changed, 0 insertions, 0 deletions