[Ada] Fix incorrect placement of freeze node with predicate

gcc/ada/

	* freeze.adb (In_Expanded_Body): Return true for the body of a
	generated predicate function.
This commit is contained in:
Eric Botcazou 2020-05-21 00:58:06 +02:00 committed by Pierre-Marie de Rodat
parent 98ceb79632
commit 1567ebf93a

View File

@ -7054,11 +7054,11 @@ package body Freeze is
-- as well.
function In_Expanded_Body (N : Node_Id) return Boolean;
-- Given an N_Handled_Sequence_Of_Statements node N, determines whether
-- it is the handled statement sequence of an expander-generated
-- subprogram: init proc, stream subprogram, renaming as body, or body
-- created for an expression function. If so, this is not a freezing
-- context and the entity will be frozen at a later point.
-- Given an N_Handled_Sequence_Of_Statements node, determines whether it
-- is the statement sequence of an expander-generated subprogram: body
-- created for an expression function, for a predicate function, an init
-- proc, a stream subprogram, or a renaming as body. If so, this is not
-- a freezing context and the entity will be frozen at a later point.
-----------------------------------------
-- Find_Aggregate_Component_Desig_Type --
@ -7112,6 +7112,13 @@ package body Freeze is
elsif Was_Expression_Function (P) then
return not Comes_From_Source (P);
-- This is the body of a generated predicate function
elsif Present (Corresponding_Spec (P))
and then Is_Predicate_Function (Corresponding_Spec (P))
then
return True;
else
Id := Defining_Unit_Name (Specification (P));