diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2024-02-12 19:25:39 +0100 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2024-05-14 10:19:54 +0200 |
commit | ba0b16a527b6d658dddca2e2609ab6b6c1fe32d4 (patch) | |
tree | 5761fb006ad530be83b8a73b61c750dd2f295656 /gcc | |
parent | 0b7673ae72286ba1a8939320580f6e9002980e73 (diff) | |
download | gcc-ba0b16a527b6d658dddca2e2609ab6b6c1fe32d4.zip gcc-ba0b16a527b6d658dddca2e2609ab6b6c1fe32d4.tar.gz gcc-ba0b16a527b6d658dddca2e2609ab6b6c1fe32d4.tar.bz2 |
ada: Follow-up adjustment after fix to Default_Initialize_Object
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/exp_ch3.adb | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index e34cb8f..9109d59 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 |