From a9a08e6d331cb454741d2b089cdedaefedfd5271 Mon Sep 17 00:00:00 2001 From: Ed Schonberg Date: Tue, 17 Sep 2019 08:00:07 +0000 Subject: [PATCH] [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 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 --- gcc/ada/ChangeLog | 6 ++++++ gcc/ada/sem_ch13.adb | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gnat.dg/predicate13.adb | 3 +++ gcc/testsuite/gnat.dg/predicate13.ads | 23 +++++++++++++++++++++++ 5 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gnat.dg/predicate13.adb create mode 100644 gcc/testsuite/gnat.dg/predicate13.ads diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 1d728fe17a7..94877b24ea1 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2019-09-17 Ed Schonberg + + * 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 * sem_ch3.adb (Constrain_Corresponding_Record): Propagate diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index 2538c1da982..ef9f965a564 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 30c75dfea8f..d5b3e5a6590 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-09-17 Ed Schonberg + + * gnat.dg/predicate13.adb, gnat.dg/predicate13.ads: New + testcase. + 2019-09-17 Javier Miranda * 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 00000000000..24b6918bfc1 --- /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 00000000000..2e19d491fec --- /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; -- 2.30.2