diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2023-10-24 09:50:25 +0200 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2023-11-21 10:57:41 +0100 |
commit | 6f69104c9e7cc455cc83139b063c08124e465f64 (patch) | |
tree | 664024a670bece496e9d40e2e48bfeda7fb2b63b | |
parent | fee97b366b10acbbc0aa5300c2ad753c18d2b266 (diff) | |
download | gcc-6f69104c9e7cc455cc83139b063c08124e465f64.zip gcc-6f69104c9e7cc455cc83139b063c08124e465f64.tar.gz gcc-6f69104c9e7cc455cc83139b063c08124e465f64.tar.bz2 |
ada: Further cleanup in finalization machinery
This removes the specific treatment of transient scopes in initialization
procedures, which is obsolete.
gcc/ada/
* exp_aggr.adb (Convert_To_Assignments): Do not treat initialization
procedures specially when it comes to creating a transient scope.
* exp_ch7.adb (Build_Finalizer.Process_Declarations): Likewise.
* exp_util.adb (Requires_Cleanup_Actions): Likewise.
-rw-r--r-- | gcc/ada/exp_aggr.adb | 10 | ||||
-rw-r--r-- | gcc/ada/exp_ch7.adb | 29 | ||||
-rw-r--r-- | gcc/ada/exp_util.adb | 9 |
3 files changed, 2 insertions, 46 deletions
diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index a6a54e8..691430a 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -4294,15 +4294,9 @@ package body Exp_Aggr is return; end if; - -- Otherwise, if a transient scope is required, create it now. If we - -- are within an initialization procedure do not create such, because - -- the target of the assignment must not be declared within a local - -- block, and because cleanup will take place on return from the - -- initialization procedure. + -- Otherwise, if a transient scope is required, create it now - -- Should the condition be more restrictive ??? - - if Requires_Transient_Scope (Typ) and then not Inside_Init_Proc then + if Requires_Transient_Scope (Typ) then Establish_Transient_Scope (N, Manage_Sec_Stack => False); end if; diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb index 2e3da4c..ef3b5c9 100644 --- a/gcc/ada/exp_ch7.adb +++ b/gcc/ada/exp_ch7.adb @@ -2479,35 +2479,6 @@ package body Exp_Ch7 is and then Present (Library_Unit (Decl)) then Process_Package_Body (Proper_Body (Unit (Library_Unit (Decl)))); - - -- Handle a rare case caused by a controlled transient object - -- created as part of a record init proc. The variable is wrapped - -- in a block, but the block is not associated with a transient - -- scope. - - elsif Nkind (Decl) = N_Block_Statement - and then Inside_Init_Proc - then - Old_Counter_Val := Counter_Val; - - if Present (Handled_Statement_Sequence (Decl)) then - Process_Declarations - (Statements (Handled_Statement_Sequence (Decl)), - Preprocess); - end if; - - Process_Declarations (Declarations (Decl), Preprocess); - - -- Either the declaration or statement list of the block has a - -- controlled object. - - if Preprocess - and then Top_Level - and then No (Last_Top_Level_Ctrl_Construct) - and then Counter_Val > Old_Counter_Val - then - Last_Top_Level_Ctrl_Construct := Decl; - end if; end if; Prev_Non_Pragma (Decl); diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index 3b34e46..3952a16 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -13233,15 +13233,6 @@ package body Exp_Util is then return True; end if; - - -- Handle a rare case caused by a controlled transient object created - -- as part of a record init proc. The variable is wrapped in a block, - -- but the block is not associated with a transient scope. - - elsif Nkind (Decl) = N_Block_Statement and then Inside_Init_Proc then - if Requires_Cleanup_Actions (Decl, Lib_Level) then - return True; - end if; end if; Next (Decl); |