Commit a9a08e6d by Ed Schonberg Committed by Pierre-Marie de Rodat

[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
parent 01e44bfa
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
......
......@@ -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);
......
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.
......
package body Predicate13 is
procedure Dummy is null;
end Predicate13;
\ No newline at end of file
-- { 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;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment