[Ada] Crash on aggregate for limited type in extended return
authorEd Schonberg <schonberg@adacore.com>
Wed, 10 Jul 2019 09:02:47 +0000 (09:02 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 10 Jul 2019 09:02:47 +0000 (09:02 +0000)
commitc14dc27e91ccd6bdc86ac0b875892396dc84a985
tree4979f01bbad8ef0e0eca5da05e71825604d6d14d
parent179682a55cbe229442cf3886e338148be0b12a96
[Ada] Crash on aggregate for limited type in extended return

This patch fixes a compiler abort on an extended return statement whose
expression is an aggregate (to be built in place) for a discriminated
record with a limited component. The build-in-place mechanism creates an
access type and a renaming declaration  through which individual
components are assigned. The renamed object is constrained because it is
limited, and the renaming declaration does not need to create a local
subtype indication for it, which may lead to type mismatches in the
back-end, and is in any case redundant. This patch extends this
optimization to the case of records that are limited only because of a
limitied component, and not because they are explicit declared limited.

2019-07-10  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch8.adb (Check_Constrained_Object): A record that is
limited because of the presence of a limited component is
constrained, and no subtype indiciation needs to be created for
it, just as is the case for declared limited records.

gcc/testsuite/

* gnat.dg/limited3.adb, gnat.dg/limited3_pkg.adb,
gnat.dg/limited3_pkg.ads: New testcase.

From-SVN: r273350
gcc/ada/ChangeLog
gcc/ada/sem_ch8.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/limited3.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/limited3_pkg.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/limited3_pkg.ads [new file with mode: 0644]