[Ada] Build full derivation for private concurrent type
authorEric Botcazou <ebotcazou@adacore.com>
Tue, 13 Aug 2019 08:08:47 +0000 (08:08 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 13 Aug 2019 08:08:47 +0000 (08:08 +0000)
commited5786a74537bde38eba66b44fa0aa88b3d2ae89
tree9b6a34e92a3d994bf6a889e0c9cbda21432c48c1
parentcffb8f959c237b5af9e94ad4d0188a34acf5d910
[Ada] Build full derivation for private concurrent type

This extends the processing done for the derivation of private
discriminated types to concurrent types, which is now required because
this derivation is no longer redone when a subtype of the derived
concurrent type is built.

This increases the number of entities generated internally in the
compiler but this case is sufficiently rare as not to be a real concern.

2019-08-13  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* sem_ch3.adb (Build_Derived_Concurrent_Type): Add a couple of
local variables and use them.  When the derived type fully
constrains the parent type, rewrite it as a subtype of an
implicit (unconstrained) derived type instead of the other way
around.
(Copy_And_Build): Deal with concurrent types and use predicates.
(Build_Derived_Private_Type): Build the full derivation if
needed for concurrent types too.
(Build_Derived_Record_Type): Add marker comment.
(Complete_Private_Subtype): Use predicates.

gcc/testsuite/

* gnat.dg/discr56.adb, gnat.dg/discr56.ads,
gnat.dg/discr56_pkg1.adb, gnat.dg/discr56_pkg1.ads,
gnat.dg/discr56_pkg2.ads: New testcase.

From-SVN: r274359
gcc/ada/ChangeLog
gcc/ada/sem_ch3.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/discr56.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/discr56.ads [new file with mode: 0644]
gcc/testsuite/gnat.dg/discr56_pkg1.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/discr56_pkg1.ads [new file with mode: 0644]
gcc/testsuite/gnat.dg/discr56_pkg2.ads [new file with mode: 0644]