diff mbox series

[COMMITTED] ada: Follow-up adjustment after fix to Default_Initialize_Object

Message ID 20240514082331.833412-1-poulhies@adacore.com
State New
Headers show
Series [COMMITTED] ada: Follow-up adjustment after fix to Default_Initialize_Object | expand

Commit Message

Marc Poulhiès May 14, 2024, 8:23 a.m. UTC
From: Eric Botcazou <ebotcazou@adacore.com>

Now that Default_Initialize_Object honors the No_Initialization flag in all
cases, objects of an access type declared without initialization expression
can no longer be considered as being automatically initialized to null.

gcc/ada/

	* exp_ch3.adb (Expand_N_Object_Declaration): Examine the Expression
	field after the call to Default_Initialize_Object in order to set
	Is_Known_Null, as well as Is_Known_Non_Null, on an access object.

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

---
 gcc/ada/exp_ch3.adb | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)
diff mbox series

Patch

diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb
index e34cb8fb58f..9109d592690 100644
--- a/gcc/ada/exp_ch3.adb
+++ b/gcc/ada/exp_ch3.adb
@@ -7604,6 +7604,16 @@  package body Exp_Ch3 is
 
          if not Special_Ret_Obj then
             Default_Initialize_Object (Init_After);
+
+            --  Check whether an access object has been initialized above
+
+            if Is_Access_Type (Typ) and then Present (Expression (N)) then
+               if Known_Non_Null (Expression (N)) then
+                  Set_Is_Known_Non_Null (Def_Id);
+               elsif Known_Null (Expression (N)) then
+                  Set_Is_Known_Null (Def_Id);
+               end if;
+            end if;
          end if;
 
          --  Generate attribute for Persistent_BSS if needed
@@ -7625,12 +7635,6 @@  package body Exp_Ch3 is
             end;
          end if;
 
-         --  If access type, then we know it is null if not initialized
-
-         if Is_Access_Type (Typ) then
-            Set_Is_Known_Null (Def_Id);
-         end if;
-
       --  Explicit initialization present
 
       else