https://gcc.gnu.org/g:b4fd15d8bea6224a431e062d846459cc57724e41

commit r15-5403-gb4fd15d8bea6224a431e062d846459cc57724e41
Author: Eric Botcazou <ebotca...@adacore.com>
Date:   Fri Nov 8 11:01:11 2024 +0100

    ada: Fix another minor fallout of previous changes to aggregate expansion
    
    This is another glitch associated with Initialization_Statements.
    
    gcc/ada/ChangeLog:
    
            * exp_util.adb (Remove_Init_Call): Rewrite a compound statement in
            the Initialization_Statements of the variable as a null statement
            instead of removing it.
            * freeze.adb (Explode_Initialization_Compound_Statement): Small
            comment tweaks.

Diff:
---
 gcc/ada/exp_util.adb | 16 ++++++++++++++++
 gcc/ada/freeze.adb   |  4 ++--
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index 767191060d82..e4397fe868d7 100644
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -12124,6 +12124,22 @@ package body Exp_Util is
          Init_Call := Initialization_Statements (Var);
          Set_Initialization_Statements (Var, Empty);
 
+         --  Note that we rewrite Init_Call into a null statement, rather than
+         --  just removing it, because Freeze_All may rely on this particular
+         --  node still being present in the enclosing list to know where to
+         --  stop freezing (see Explode_Initialization_Compound_Statement).
+
+         if Nkind (Init_Call) = N_Compound_Statement then
+            declare
+               Init_Actions : constant List_Id    := Actions (Init_Call);
+               Loc          : constant Source_Ptr := Sloc (Init_Call);
+
+            begin
+               Rewrite (Init_Call, Make_Null_Statement (Loc));
+               return Make_Compound_Statement (Loc, Init_Actions);
+            end;
+         end if;
+
       elsif not Has_Non_Null_Base_Init_Proc (Typ) then
 
          --  No init proc for the type, so obviously no call to be found
diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb
index 3b781f7d21c1..67a51899f951 100644
--- a/gcc/ada/freeze.adb
+++ b/gcc/ada/freeze.adb
@@ -2471,9 +2471,9 @@ package body Freeze is
             Insert_List_Before (Init_Stmts, Actions (Init_Stmts));
          end if;
 
-         --  Note that we rewrite Init_Stmts into a NULL statement, rather than
+         --  Note that we rewrite Init_Stmts into a null statement, rather than
          --  just removing it, because Freeze_All may rely on this particular
-         --  Node_Id still being present in the enclosing list to know where to
+         --  node still being present in the enclosing list to know where to
          --  stop freezing.
 
          Rewrite (Init_Stmts, Make_Null_Statement (Sloc (Init_Stmts)));

Reply via email to