[Ada] Fix incorrect placement of freeze node with predicate
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 20 May 2020 22:58:06 +0000 (00:58 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Wed, 8 Jul 2020 14:55:54 +0000 (10:55 -0400)
gcc/ada/

* freeze.adb (In_Expanded_Body): Return true for the body of a
generated predicate function.

gcc/ada/freeze.adb

index 528a7dd871887dfefc4f451998e3163aef02838e..33eefb22efe6c79825fa1efd46e09e1a13ddd8a3 100644 (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));