diff mbox series

[COMMITTED] ada: Deconstruct flag Split_PPC since splitting now is done in expansion

Message ID 20240513083634.165899-1-poulhies@adacore.com
State New
Headers show
Series [COMMITTED] ada: Deconstruct flag Split_PPC since splitting now is done in expansion | expand

Commit Message

Marc Poulhiès May 13, 2024, 8:36 a.m. UTC
From: Piotr Trojanek <trojanek@adacore.com>

Remove flag Split_PPC and all its uses.

gcc/ada/

	* contracts.adb (Append_Enabled_Item): Remove use of Split_PPC;
	simplify.
	* gen_il-fields.ads (Opt_Field_Enum): Remove flag definition.
	* gen_il-gen-gen_nodes.adb (N_Aspect_Specification, N_Pragma):
	Remove Split_PPC flags.
	* gen_il-internals.adb (Image): Remove use of Split_PPC.
	* par_sco.adb (Traverse_Aspects): Likewise.
	* sem_ch13.adb (Make_Aitem_Pragma): Likewise.
	* sem_ch6.adb (List_Inherited_Pre_Post_Aspects): Likewise.
	* sem_prag.adb (Analyze_Pre_Post_Condition, Analyze_Pragma,
	Find_Related_Declaration_Or_Body): Likewise.
	* sem_util.adb (Applied_On_Conjunct): Likewise.
	* sinfo.ads: Remove flag documentation.
	* treepr.adb (Image): Remove use of Split_PPC.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/contracts.adb            | 17 +-------
 gcc/ada/gen_il-fields.ads        |  1 -
 gcc/ada/gen_il-gen-gen_nodes.adb |  2 -
 gcc/ada/gen_il-internals.adb     |  2 -
 gcc/ada/par_sco.adb              |  5 ---
 gcc/ada/sem_ch13.adb             | 15 +++----
 gcc/ada/sem_ch6.adb              |  4 +-
 gcc/ada/sem_prag.adb             |  8 +---
 gcc/ada/sem_util.adb             | 73 ++++++--------------------------
 gcc/ada/sinfo.ads                | 19 +--------
 gcc/ada/treepr.adb               |  2 -
 11 files changed, 25 insertions(+), 123 deletions(-)
diff mbox series

Patch

diff --git a/gcc/ada/contracts.adb b/gcc/ada/contracts.adb
index c04d850b532..97f38735662 100644
--- a/gcc/ada/contracts.adb
+++ b/gcc/ada/contracts.adb
@@ -2714,22 +2714,7 @@  package body Contracts is
          --  Otherwise, add the item
 
          else
-            if No (List) then
-               List := New_List;
-            end if;
-
-            --  If the pragma is a conjunct in a composite postcondition, it
-            --  has been processed in reverse order. In the postcondition body
-            --  it must appear before the others.
-
-            if Nkind (Item) = N_Pragma
-              and then From_Aspect_Specification (Item)
-              and then Split_PPC (Item)
-            then
-               Prepend (Item, List);
-            else
-               Append (Item, List);
-            end if;
+            Append_New (Item, List);
          end if;
       end Append_Enabled_Item;
 
diff --git a/gcc/ada/gen_il-fields.ads b/gcc/ada/gen_il-fields.ads
index 67074c60250..54a5703d1a5 100644
--- a/gcc/ada/gen_il-fields.ads
+++ b/gcc/ada/gen_il-fields.ads
@@ -386,7 +386,6 @@  package Gen_IL.Fields is
       Shift_Count_OK,
       Source_Type,
       Specification,
-      Split_PPC,
       Statements,
       Storage_Pool,
       Subpool_Handle_Name,
diff --git a/gcc/ada/gen_il-gen-gen_nodes.adb b/gcc/ada/gen_il-gen-gen_nodes.adb
index 3a78ffb2009..f3dc215673a 100644
--- a/gcc/ada/gen_il-gen-gen_nodes.adb
+++ b/gcc/ada/gen_il-gen-gen_nodes.adb
@@ -1251,7 +1251,6 @@  begin -- Gen_IL.Gen.Gen_Nodes
        (Sy (Identifier, Node_Id, Default_Empty),
         Sy (Expression, Node_Id, Default_Empty),
         Sy (Class_Present, Flag),
-        Sy (Split_PPC, Flag),
         Sm (Aspect_On_Partial_View, Flag),
         Sm (Aspect_Rep_Item, Node_Id),
         Sm (Entity_Or_Associated_Node, Node_Id), -- just Entity
@@ -1556,7 +1555,6 @@  begin -- Gen_IL.Gen.Gen_Nodes
        (Sy (Pragma_Argument_Associations, List_Id, Default_No_List),
         Sy (Pragma_Identifier, Node_Id),
         Sy (Class_Present, Flag),
-        Sy (Split_PPC, Flag),
         Sm (Corresponding_Aspect, Node_Id),
         Sm (From_Aspect_Specification, Flag),
         Sm (Import_Interface_Present, Flag),
diff --git a/gcc/ada/gen_il-internals.adb b/gcc/ada/gen_il-internals.adb
index a0f55d39a42..e08397f7d4e 100644
--- a/gcc/ada/gen_il-internals.adb
+++ b/gcc/ada/gen_il-internals.adb
@@ -339,8 +339,6 @@  package body Gen_IL.Internals is
             return "SPARK_Pragma";
          when SPARK_Pragma_Inherited =>
             return "SPARK_Pragma_Inherited";
-         when Split_PPC =>
-            return "Split_PPC";
          when SSO_Set_High_By_Default =>
             return "SSO_Set_High_By_Default";
          when SSO_Set_Low_By_Default =>
diff --git a/gcc/ada/par_sco.adb b/gcc/ada/par_sco.adb
index 144c1382369..83c1d001ee5 100644
--- a/gcc/ada/par_sco.adb
+++ b/gcc/ada/par_sco.adb
@@ -1704,11 +1704,6 @@  package body Par_SCO is
          while Present (AN) loop
             AE := Expression (AN);
 
-            --  SCOs are generated before semantic analysis/expansion:
-            --  PPCs are not split yet.
-
-            pragma Assert (not Split_PPC (AN));
-
             C1 := ASCII.NUL;
 
             case Get_Aspect_Id (AN) is
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index efbc67f3c5d..0470ce10ac7 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -1776,12 +1776,12 @@  package body Sem_Ch13 is
                Pragma_Name                  : Name_Id) return Node_Id;
             --  This is a wrapper for Make_Pragma used for converting aspects
             --  to pragmas. It takes care of Sloc (set from Loc) and building
-            --  the pragma identifier from the given name. In addition the
-            --  flags Class_Present and Split_PPC are set from the aspect
-            --  node, as well as Is_Ignored. This routine also sets the
-            --  From_Aspect_Specification in the resulting pragma node to
-            --  True, and sets Corresponding_Aspect to point to the aspect.
-            --  The resulting pragma is assigned to Aitem.
+            --  the pragma identifier from the given name. In addition the flag
+            --  Class_Present is set from the aspect node, as well as
+            --  Is_Ignored. This routine also sets the
+            --  From_Aspect_Specification in the resulting pragma node to True,
+            --  and sets Corresponding_Aspect to point to the aspect. The
+            --  resulting pragma is assigned to Aitem.
 
             -------------------------------
             -- Analyze_Aspect_Convention --
@@ -2703,8 +2703,7 @@  package body Sem_Ch13 is
                    Pragma_Argument_Associations => Args,
                    Pragma_Identifier =>
                      Make_Identifier (Sloc (Id), Pragma_Name),
-                   Class_Present     => Class_Present (Aspect),
-                   Split_PPC         => Split_PPC (Aspect));
+                   Class_Present     => Class_Present (Aspect));
 
                --  Set additional semantic fields
 
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 446a0b870d5..17f62d3dfb8 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -11175,9 +11175,7 @@  package body Sem_Ch6 is
                   while Present (Prag) loop
                      Error_Msg_Sloc := Sloc (Prag);
 
-                     if Class_Present (Prag)
-                       and then not Split_PPC (Prag)
-                     then
+                     if Class_Present (Prag) then
                         if Pragma_Name (Prag) = Name_Precondition then
                            Error_Msg_N
                              ("info: & inherits `Pre''Class` aspect from "
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index b26054e336b..3ebee2968bc 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -5192,7 +5192,7 @@  package body Sem_Prag is
          --  status in SCO.
          --  ??? nothing checks that the pragma is in the main source unit
 
-         if Is_Checked (N) and then not Split_PPC (N) then
+         if Is_Checked (N) then
             Set_SCO_Pragma_Enabled (Loc);
          end if;
 
@@ -14516,7 +14516,6 @@  package body Sem_Prag is
             --  check for a dynamic predicate.
 
             if Is_Checked (N)
-              and then not Split_PPC (N)
               and then Cname /= Name_Dynamic_Predicate
             then
                Set_SCO_Pragma_Enabled (Loc);
@@ -31996,13 +31995,10 @@  package body Sem_Prag is
       Stmt := Prev (Prag);
       while Present (Stmt) loop
 
-         --  Skip prior pragmas, but check for duplicates. Pragmas produced
-         --  by splitting a complex pre/postcondition are not considered to
-         --  be duplicates.
+         --  Skip prior pragmas, but check for duplicates
 
          if Nkind (Stmt) = N_Pragma then
             if Do_Checks
-              and then not Split_PPC (Stmt)
               and then Original_Aspect_Pragma_Name (Stmt) = Prag_Nam
             then
                Duplication_Error
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index 03055039a1f..1166c68b972 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -4131,16 +4131,7 @@  package body Sem_Util is
             begin
                --  Expr is the conjunct of an enclosing "and" expression
 
-               return Nkind (Parent (Expr)) in N_Subexpr
-
-                 --  or Expr is a conjunct of an enclosing "and then"
-                 --  expression in a postcondition aspect that was split into
-                 --  multiple pragmas. The first conjunct has the "and then"
-                 --  expression as Original_Node, and other conjuncts have
-                 --  Split_PCC set to True.
-
-                 or else Nkind (Original_Node (Expr)) = N_And_Then
-                 or else Split_PPC (Prag);
+               return Nkind (Parent (Expr)) in N_Subexpr;
             end Applied_On_Conjunct;
 
             -----------------------
@@ -30514,56 +30505,18 @@  package body Sem_Util is
                      end if;
 
                   when N_Pragma =>
-                     declare
-                        Previous : constant Node_Id := Prev (Par);
-                        Prev_Expr : Node_Id;
-                     begin
-                        if Nkind (Previous) = N_Pragma and then
-                          Split_PPC (Previous)
-                        then
-                           --  A source-level postcondition of
-                           --    A and then B and then C
-                           --  results in
-                           --    pragma Postcondition (A);
-                           --    pragma Postcondition (B);
-                           --    pragma Postcondition (C);
-                           --  with Split_PPC set to True on all but the
-                           --  last pragma. We account for that here.
-
-                           Prev_Expr :=
-                             Expression (First
-                               (Pragma_Argument_Associations (Previous)));
-
-                           --  This Analyze call is needed in the case when
-                           --  Sem_Attr.Analyze_Attribute calls
-                           --  Eligible_For_Conditional_Evaluation. Without
-                           --  it, we end up passing an unanalyzed expression
-                           --  to Is_Known_On_Entry and that doesn't work.
-
-                           Analyze (Prev_Expr);
-
-                           Next_Element :=
-                             (Expr        => Prev_Expr,
-                              Context     => Short_Circuit_Op,
-                              Is_And_Then => True);
-
-                           return Determining_Expressions (Prev_Expr)
-                             & Next_Element;
-                        else
-                           pragma Assert
-                             (Get_Pragma_Id (Pragma_Name (Par)) in
-                                Pragma_Check
-                              | Pragma_Contract_Cases
-                              | Pragma_Exceptional_Cases
-                              | Pragma_Post
-                              | Pragma_Postcondition
-                              | Pragma_Post_Class
-                              | Pragma_Refined_Post
-                              | Pragma_Test_Case);
-
-                           return (1 .. 0 => <>); -- recursion terminates here
-                        end if;
-                     end;
+                     pragma Assert
+                       (Get_Pragma_Id (Pragma_Name (Par)) in
+                          Pragma_Check
+                        | Pragma_Contract_Cases
+                        | Pragma_Exceptional_Cases
+                        | Pragma_Post
+                        | Pragma_Postcondition
+                        | Pragma_Post_Class
+                        | Pragma_Refined_Post
+                        | Pragma_Test_Case);
+
+                     return (1 .. 0 => <>); -- recursion terminates here
 
                   when N_Empty =>
                      --  This case should be impossible, but if it does
diff --git a/gcc/ada/sinfo.ads b/gcc/ada/sinfo.ads
index bee4491efde..7cad6cf1d29 100644
--- a/gcc/ada/sinfo.ads
+++ b/gcc/ada/sinfo.ads
@@ -2314,14 +2314,6 @@  package Sinfo is
    --    source type entity for the unchecked conversion instantiation
    --    which gigi must do size validation for.
 
-   --  Split_PPC
-   --    When a Pre or Post aspect specification is processed, it is broken
-   --    into AND THEN sections. The leftmost section has Split_PPC set to
-   --    False, indicating that it is the original specification (e.g. for
-   --    posting errors). For other sections, Split_PPC is set to True.
-   --    This flag is set in both the N_Aspect_Specification node itself,
-   --    and in the pragma which is generated from this node.
-
    --  Storage_Pool
    --    Present in N_Allocator, N_Free_Statement, N_Simple_Return_Statement,
    --    and N_Extended_Return_Statement nodes. References the entity for the
@@ -2724,7 +2716,6 @@  package Sinfo is
       --  Is_Delayed_Aspect
       --  Is_Disabled
       --  Import_Interface_Present
-      --  Split_PPC set if corresponding aspect had Split_PPC set
       --  Uneval_Old_Warn
 
       --  Note: we should have a section on what pragmas are passed on to
@@ -7594,7 +7585,6 @@  package Sinfo is
       --  Is_Delayed_Aspect
       --  Is_Disabled
       --  Is_Boolean_Aspect
-      --  Split_PPC Set if split pre/post attribute
       --  Aspect_On_Partial_View
 
       --  Note: Aspect_Specification is an Ada 2012 feature
@@ -7609,11 +7599,6 @@  package Sinfo is
       --  In the case of aspects of the form xxx'Class, the aspect identifier
       --  is for xxx, and Class_Present is set to True.
 
-      --  Note: When a Pre or Post aspect specification is processed, it is
-      --  broken into AND THEN sections. The left most section has Split_PPC
-      --  set to False, indicating that it is the original specification (e.g.
-      --  for posting errors). For the other sections, Split_PPC is set True.
-
       ---------------------------------------------
       -- 13.4  Enumeration representation clause --
       ---------------------------------------------
@@ -7969,9 +7954,7 @@  package Sinfo is
       --  The ordering in the list is in LIFO fashion.
 
       --  Note that there might be multiple preconditions or postconditions
-      --  in this list, either because they come from separate pragmas in the
-      --  source, or because a Pre (resp. Post) aspect specification has been
-      --  broken into AND THEN sections. See Split_PPC for details.
+      --  in this list, because they come from separate pragmas in the source.
 
       --  In GNATprove mode, the inherited classwide pre- and postconditions
       --  (suitably specialized for the specific type of the overriding
diff --git a/gcc/ada/treepr.adb b/gcc/ada/treepr.adb
index c5875f0a2be..f02f7ece30c 100644
--- a/gcc/ada/treepr.adb
+++ b/gcc/ada/treepr.adb
@@ -301,8 +301,6 @@  package body Treepr is
             return "SCIL_Target_Prim";
          when F_Shift_Count_OK =>
             return "Shift_Count_OK";
-         when F_Split_PPC =>
-            return "Split_PPC";
          when F_TSS_Elist =>
             return "TSS_Elist";