[Ada] Compiler abort on a dynamic predicate used in a precondition
authorEd Schonberg <schonberg@adacore.com>
Fri, 5 Jul 2019 07:02:03 +0000 (07:02 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Fri, 5 Jul 2019 07:02:03 +0000 (07:02 +0000)
commitdb6261488e4e53e4ac09ec9db50ea2e4a1859377
treea986027d4dac11bec4c8e61a041e512a5d4d41aa
parent85ee7b4903e320b8f22ac0350afcd07263d2a5d6
[Ada] Compiler abort on a dynamic predicate used in a precondition

This patch suppresses the generation of a predicate check when the
expression is a formal IN parameter of a subprogram S. If the check is
being applied to the actual in a call, the call is either in the body of
S, or in an aspect specfication for S, e.g. a precondition, In both
cases the check is redundant bevause it will be applied on any call to
S. In the second case the expansion of the predicate check may lead to
out-of-scope references the the formal.

2019-07-05  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* checks.adb (Apply_Predicate_Check): Except within the
subprogram body that defines the formal, do not apply predicate
check on a formal IN parameter: such a check is redundant and
its expansion can lead to out-of-scope references when it is
originates in a function call in a precondition,

gcc/testsuite/

* gnat.dg/predicate7.adb, gnat.dg/predicate7.ads,
gnat.dg/predicate7_pkg.ads: New testcase.

From-SVN: r273106
gcc/ada/ChangeLog
gcc/ada/checks.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/predicate7.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/predicate7.ads [new file with mode: 0644]
gcc/testsuite/gnat.dg/predicate7_pkg.ads [new file with mode: 0644]