aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2019-09-17 08:00:07 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-09-17 08:00:07 +0000
commita9a08e6d331cb454741d2b089cdedaefedfd5271 (patch)
treee16bb4785cb0191756fb6d85af223dc5a7ba4537
parent01e44bfa81a3423d55e5d624e2c7241daedf44e4 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/ada/sem_ch13.adb2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gnat.dg/predicate13.adb3
-rw-r--r--gcc/testsuite/gnat.dg/predicate13.ads23
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;