public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [Ada] In a generic use Presanalyze_Spec_Expression on Predicates
@ 2019-09-17  8:07 Pierre-Marie de Rodat
  0 siblings, 0 replies; only message in thread
From: Pierre-Marie de Rodat @ 2019-09-17  8:07 UTC (permalink / raw)
  To: gcc-patches; +Cc: Ed Schonberg

[-- Attachment #1: Type: text/plain, Size: 764 bytes --]

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.

Tested on x86_64-pc-linux-gnu, committed on trunk

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.

[-- Attachment #2: patch.diff --]
[-- Type: text/x-diff, Size: 1107 bytes --]

--- gcc/ada/sem_ch13.adb
+++ 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);

--- /dev/null
new file mode 100644
+++ 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

--- /dev/null
new file mode 100644
+++ 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;


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-09-17  8:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-17  8:07 [Ada] In a generic use Presanalyze_Spec_Expression on Predicates Pierre-Marie de Rodat

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).