diff options
author | Ed Schonberg <schonberg@adacore.com> | 2019-07-10 09:02:47 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2019-07-10 09:02:47 +0000 |
commit | c14dc27e91ccd6bdc86ac0b875892396dc84a985 (patch) | |
tree | 4979f01bbad8ef0e0eca5da05e71825604d6d14d /gcc/ada/init.c | |
parent | 179682a55cbe229442cf3886e338148be0b12a96 (diff) | |
download | gcc-c14dc27e91ccd6bdc86ac0b875892396dc84a985.zip gcc-c14dc27e91ccd6bdc86ac0b875892396dc84a985.tar.gz gcc-c14dc27e91ccd6bdc86ac0b875892396dc84a985.tar.bz2 |
[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
Diffstat (limited to 'gcc/ada/init.c')
0 files changed, 0 insertions, 0 deletions