diff options
author | Ed Schonberg <schonberg@adacore.com> | 2019-09-17 08:00:07 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2019-09-17 08:00:07 +0000 |
commit | a9a08e6d331cb454741d2b089cdedaefedfd5271 (patch) | |
tree | e16bb4785cb0191756fb6d85af223dc5a7ba4537 | |
parent | 01e44bfa81a3423d55e5d624e2c7241daedf44e4 (diff) | |
download | gcc-a9a08e6d331cb454741d2b089cdedaefedfd5271.zip gcc-a9a08e6d331cb454741d2b089cdedaefedfd5271.tar.gz gcc-a9a08e6d331cb454741d2b089cdedaefedfd5271.tar.bz2 |
[Ada] In a generic use Presanalyze_Spec_Expression on Predicates
When verifying that the meaning of an aspect has not changed between the
freeze point of the entity and the end of the declarations, we analkyze
a copy of the expression to verify its conformance to previous analysis.
If the expression contains overloaded references, these have to be
resolved, which is not done if the expression is only preanalyzed. This
applies in particular to expressions in predicates.
2019-09-17 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_ch13.adb (Check_Aspect_At_End_Of_Declarations): In a
generic context, for a Predicate aspect, use
Preanalyze_Spec_Expression to verify conformance.
gcc/testsuite/
* gnat.dg/predicate13.adb, gnat.dg/predicate13.ads: New
testcase.
From-SVN: r275778
-rw-r--r-- | gcc/ada/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ada/sem_ch13.adb | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/predicate13.adb | 3 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/predicate13.ads | 23 |
5 files changed, 38 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 1d728fe..94877b2 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2019-09-17 Ed Schonberg <schonberg@adacore.com> + + * sem_ch13.adb (Check_Aspect_At_End_Of_Declarations): In a + generic context, for a Predicate aspect, use + Preanalyze_Spec_Expression to verify conformance. + 2019-09-17 Javier Miranda <miranda@adacore.com> * sem_ch3.adb (Constrain_Corresponding_Record): Propagate diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index 2538c1d..ef9f965 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -9383,7 +9383,7 @@ package body Sem_Ch13 is or else A_Id = Aspect_Priority then Push_Type (Ent); - Preanalyze (Freeze_Expr); + Preanalyze_Spec_Expression (Freeze_Expr, T); Pop_Type (Ent); else Preanalyze (Freeze_Expr); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 30c75df..d5b3e5a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-09-17 Ed Schonberg <schonberg@adacore.com> + + * gnat.dg/predicate13.adb, gnat.dg/predicate13.ads: New + testcase. + 2019-09-17 Javier Miranda <miranda@adacore.com> * gnat.dg/limited4.adb: New testcase. diff --git a/gcc/testsuite/gnat.dg/predicate13.adb b/gcc/testsuite/gnat.dg/predicate13.adb new file mode 100644 index 0000000..24b6918 --- /dev/null +++ b/gcc/testsuite/gnat.dg/predicate13.adb @@ -0,0 +1,3 @@ +package body Predicate13 is + procedure Dummy is null; +end Predicate13;
\ No newline at end of file diff --git a/gcc/testsuite/gnat.dg/predicate13.ads b/gcc/testsuite/gnat.dg/predicate13.ads new file mode 100644 index 0000000..2e19d49 --- /dev/null +++ b/gcc/testsuite/gnat.dg/predicate13.ads @@ -0,0 +1,23 @@ +-- { dg-do compile } +generic +package Predicate13 is + + function Valid return Boolean is + (True); + + function Foo return Boolean is + (True); + + type State_Type is (Valid, Invalid); + type Context_Type is private; + + private + + type Context_Type is + record + State : State_Type; + end record with Dynamic_Predicate => (State = Valid); + + procedure Dummy; + +end Predicate13; |