[Ada] Fix internal error on extension of record with representation clause
commit294e7bbb9eb0b1f8d0484e9ddb562a08f7505cab
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 21 Aug 2018 14:46:40 +0000 (21 14:46 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 21 Aug 2018 14:46:40 +0000 (21 14:46 +0000)
tree4f070890782e75ac457fb293811a7608860bb10c
parent2e5df2955f9ec8deafeb2978fcb38fb99f2660fd
[Ada] Fix internal error on extension of record with representation clause

This fixes a long-standing issue present for extensions of tagged record
types with a representation clause: the clause is correctly inherited
for components inherited in the extension but the position and size are
not, which fools the logic of Is_Possibly_Unaligned_Object.

This can result in an attempt to take the address of a component not
aligned on a byte boundary, which is then flagged as an internal error.

2018-08-21  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_util.adb (Is_Possibly_Unaligned_Object): For the case of a
selected component inherited in a record extension and subject
to a representation clause, retrieve the position and size from
the original record component.

gcc/testsuite/

* gnat.dg/rep_clause7.adb: New testcase.

From-SVN: r263717
gcc/ada/ChangeLog
gcc/ada/exp_util.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/rep_clause7.adb [new file with mode: 0644]