[Ada] Crash on expression function as completion, with implicit dereference
authorEd Schonberg <schonberg@adacore.com>
Thu, 11 Jan 2018 08:53:15 +0000 (08:53 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 11 Jan 2018 08:53:15 +0000 (08:53 +0000)
commit52c5090a4f940459ac3e38bcee0fd9f5f86a4eff
treef6ee50a6149b595f15bbdd02da83116a39fa1a8a
parent2e01b698bd52e3b4af71a5cb03e647d3ac8cf601
[Ada] Crash on expression function as completion, with implicit dereference

An implicit dereference freezes the corresponding designated type. Most
implicit dereferences are made explicit during expansion, but this is not the
case for a dispatching call where the the controlling parameter and the
corresponding controlling argument are access to a tagged type. In that case,
to enforce the rule that an expression function that is a completion freezes
type references within, we must locate controlling arguments of an access type
and freeze explicitly the corresponding designated type.

2018-01-11  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch6.adb (Freeze_Expr_Types): If an access value is the
controlling argument of a dispatching call. freeze the corresponding
designated type.

gcc/testsuite/

* gnat.dg/expr_func3.adb, gnat.dg/expr_func3.ads: New testcase.

From-SVN: r256507
gcc/ada/ChangeLog
gcc/ada/sem_ch6.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/expr_func3.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/expr_func3.ads [new file with mode: 0644]