@@ -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
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(-)