[Ada] Spurious error in dispatching call with class-wide precondition
authorEd Schonberg <schonberg@adacore.com>
Tue, 20 Aug 2019 09:49:56 +0000 (09:49 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 20 Aug 2019 09:49:56 +0000 (09:49 +0000)
commit1233757a2dd3bf314aa308e51cbaeb6a512d59db
tree7561a4352f911447065413a2aef272765ffbead6
parent9740c2446478d5d1e85015f3d40402b8ca1b061a
[Ada] Spurious error in dispatching call with class-wide precondition

This patch fixes a spurious visibility error on a dispatching call to
a subprogram with a classwide precondition, when the call qppears in
the same declarative part as the subprogram declaration itself.

2019-08-20  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_disp.adb (Build_Class_Wide_Check, Replace_Formals): When a
dispatching call tp a subprogram with a class-wide precondition
occurrs in the same declarative part as the ancestor subprogram
being called, the`expression for the precondition has not been
analyzed yet. Such a call may appear, e.g. in an expression
function. In that case, the replacement of formals by actuals in
the call cannot use the formal entities of the subprogram being
called, and the occurrence of the formals in the expression must
be located by name (Chars fields) as would be done at a later
freeze point, when the expression is resolved in the context of
the subprogram itself.

gcc/testsuite/

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

From-SVN: r274733
gcc/ada/ChangeLog
gcc/ada/exp_disp.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/tagged5.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/tagged5.ads [new file with mode: 0644]