[Ada] Crash on aggregate for limited type in extended return

Programming / Compilers / GCC - pmderodat [138bc75d-0d04-0410-961f-82ee72b054a4] - 10 July 2019 09:02 EDT

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

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.

c0e85bb620e [Ada] Crash on aggregate for limited type in extended return
gcc/ada/ChangeLog | 7 +++++++
gcc/ada/sem_ch8.adb | 13 +++++++++----
gcc/testsuite/ChangeLog | 5 +++++
gcc/testsuite/gnat.dg/limited3.adb | 11 +++++++++++
gcc/testsuite/gnat.dg/limited3_pkg.adb | 20 ++++++++++++++++++++
gcc/testsuite/gnat.dg/limited3_pkg.ads | 30 ++++++++++++++++++++++++++++++
6 files changed, 82 insertions(+), 4 deletions(-)

Upstream: gcc.gnu.org


  • Share