ada: Small cleanup and refactoring in expansion of asynchronous select

The exception handler that catches Abort_Signal does nothing nowadays.
This refactors the code to use Build_Abort_Block more consistently and
also makes it simpler by dropping the identifier on the abort block.

No functional changes.

gcc/ada/ChangeLog:

	* exp_sel.ads (Build_Abort_Block): Remove second parameter and
	rename the third.
	(Build_Abort_Block_Handler): Fix description.
	* exp_sel.adb (Build_Abort_Block): Remove second parameter, rename
	the third and adjust accordingly.
	* exp_ch9.adb (Expand_N_Asynchronous_Select): Fix the description
	of the exception handler throughout.  Remove Abort_Block_Ent and
	Hdle local variables.  Call Build_Abort_Block consistently to build
	the abort block and adjust existing calls.
This commit is contained in:
Eric Botcazou 2024-10-31 11:21:56 +01:00 committed by Marc Poulhiès
parent 0019e8dc76
commit 6a7849592d
3 changed files with 54 additions and 91 deletions

View File

@ -6482,7 +6482,7 @@ package body Exp_Ch9 is
-- _clean; -- Added by Exp_Ch7.Expand_Cleanup_Actions
-- end;
-- exception
-- when Abort_Signal => Abort_Undefer;
-- when Abort_Signal => null;
-- end;
-- parm := P.param;
@ -6545,7 +6545,7 @@ package body Exp_Ch9 is
-- _clean; -- Added by Exp_Ch7.Expand_Cleanup_Actions
-- end;
-- exception
-- when Abort_Signal => Abort_Undefer;
-- when Abort_Signal => null;
-- end;
-- if not Cancelled (Bnn) then
@ -6626,7 +6626,7 @@ package body Exp_Ch9 is
-- _clean; -- Added by Exp_Ch7.Expand_Cleanup_Actions
-- end;
-- exception
-- when Abort_Signal => Abort_Undefer;
-- when Abort_Signal => null;
-- end;
-- if not Cancelled (Bnn) then
@ -6659,7 +6659,7 @@ package body Exp_Ch9 is
-- _clean; -- Added by Exp_Ch7.Expand_Cleanup_Actions
-- end;
-- exception
-- when Abort_Signal => Abort_Undefer;
-- when Abort_Signal => null;
-- end;
-- if not U then
@ -6693,7 +6693,6 @@ package body Exp_Ch9 is
Abrt : constant Node_Id := Abortable_Part (N);
Trig : constant Node_Id := Triggering_Alternative (N);
Abort_Block_Ent : Entity_Id;
Abortable_Block : Node_Id;
Actuals : List_Id;
Astats : List_Id;
@ -6714,7 +6713,6 @@ package body Exp_Ch9 is
Ename : Node_Id;
Enqueue_Call : Node_Id;
Formals : List_Id;
Hdle : List_Id;
Index : Node_Id;
Lim_Typ_Stmts : List_Id;
N_Orig : Node_Id;
@ -6968,17 +6966,11 @@ package body Exp_Ch9 is
-- begin
-- Cleanup_Block
-- exception
-- when Abort_Signal => Abort_Undefer;
-- when Abort_Signal => null;
-- end;
Abort_Block_Ent := Make_Temporary (Loc, 'A');
ProtE_Stmts :=
New_List (
Make_Implicit_Label_Declaration (Loc,
Defining_Identifier => Abort_Block_Ent),
Build_Abort_Block
(Loc, Abort_Block_Ent, Cleanup_Block_Ent, Cleanup_Block));
ProtE_Stmts := New_List (
Build_Abort_Block (Loc, Cleanup_Block_Ent, Cleanup_Block));
-- Generate:
-- if not Cancelled (Bnn) then
@ -7081,18 +7073,11 @@ package body Exp_Ch9 is
-- begin
-- Cleanup_Block
-- exception
-- when Abort_Signal => Abort_Undefer;
-- when Abort_Signal => null;
-- end;
Abort_Block_Ent := Make_Temporary (Loc, 'A');
Append_To (TaskE_Stmts,
Make_Implicit_Label_Declaration (Loc,
Defining_Identifier => Abort_Block_Ent));
Append_To (TaskE_Stmts,
Build_Abort_Block
(Loc, Abort_Block_Ent, Cleanup_Block_Ent, Cleanup_Block));
Build_Abort_Block (Loc, Cleanup_Block_Ent, Cleanup_Block));
-- Generate:
-- if not T then
@ -7237,10 +7222,6 @@ package body Exp_Ch9 is
Prefix => New_Occurrence_Of (Dblock_Ent, Loc),
Attribute_Name => Name_Unchecked_Access));
-- Create the inner block to protect the abortable part
Hdle := New_List (Build_Abort_Block_Handler (Loc));
Prepend_To (Astats, Build_Runtime_Call (Loc, RE_Abort_Undefer));
Abortable_Block :=
@ -7252,6 +7233,18 @@ package body Exp_Ch9 is
Has_Created_Identifier => True,
Is_Asynchronous_Call_Block => True);
-- Wrap the abortable block in an exception handling block
-- Generate:
-- begin
-- Abortable_Block
-- exception
-- when Abort_Signal => null;
-- end;
Stmts := New_List (
Build_Abort_Block (Loc, Blk_Ent, Abortable_Block));
-- Append call to if Enqueue (When, DB'Unchecked_Access) then
Rewrite (Ecall,
@ -7260,16 +7253,7 @@ package body Exp_Ch9 is
Make_Function_Call (Loc,
Name => Enqueue_Call,
Parameter_Associations => Parameter_Associations (Ecall)),
Then_Statements =>
New_List (Make_Block_Statement (Loc,
Handled_Statement_Sequence =>
Make_Handled_Sequence_Of_Statements (Loc,
Statements => New_List (
Make_Implicit_Label_Declaration (Loc,
Defining_Identifier => Blk_Ent,
Label_Construct => Abortable_Block),
Abortable_Block),
Exception_Handlers => Hdle)))));
Then_Statements => Stmts));
Stmts := New_List (Ecall);
@ -7387,31 +7371,21 @@ package body Exp_Ch9 is
Has_Created_Identifier => True,
Is_Asynchronous_Call_Block => True);
-- Wrap the abortable block in an exception handling block
-- Generate:
-- begin
-- Abortable_Block
-- exception
-- when Abort_Signal => null;
-- end;
Stmts := New_List (
Make_Block_Statement (Loc,
Handled_Statement_Sequence =>
Make_Handled_Sequence_Of_Statements (Loc,
Statements => New_List (
Make_Implicit_Label_Declaration (Loc,
Defining_Identifier => Blk_Ent,
Label_Construct => Abortable_Block),
Abortable_Block),
Build_Abort_Block (Loc, Blk_Ent, Abortable_Block),
-- exception
Exception_Handlers => New_List (
Make_Implicit_Exception_Handler (Loc,
-- when Abort_Signal =>
-- null;
Exception_Choices =>
New_List (New_Occurrence_Of (Stand.Abort_Signal, Loc)),
Statements => New_List (Make_Null_Statement (Loc)))))),
-- if not Cancelled (Bnn) then
-- triggered statements
-- end if;
-- if not Cancelled (Bnn) then
-- triggered statements
-- end if;
Make_Implicit_If_Statement (N,
Condition => Make_Op_Not (Loc,
@ -7467,10 +7441,6 @@ package body Exp_Ch9 is
Call := Stmt;
-- Create the inner block to protect the abortable part
Hdle := New_List (Build_Abort_Block_Handler (Loc));
if Abort_Allowed then
Prepend_To (Astats, Build_Runtime_Call (Loc, RE_Abort_Undefer));
end if;
@ -7483,16 +7453,17 @@ package body Exp_Ch9 is
Has_Created_Identifier => True,
Is_Asynchronous_Call_Block => True);
-- Wrap the abortable block in an exception handling block
-- Generate:
-- begin
-- Abortable_Block
-- exception
-- when Abort_Signal => null;
-- end;
Insert_After (Call,
Make_Block_Statement (Loc,
Handled_Statement_Sequence =>
Make_Handled_Sequence_Of_Statements (Loc,
Statements => New_List (
Make_Implicit_Label_Declaration (Loc,
Defining_Identifier => Blk_Ent,
Label_Construct => Abortable_Block),
Abortable_Block),
Exception_Handlers => Hdle)));
Build_Abort_Block (Loc, Blk_Ent, Abortable_Block));
-- Create new call statement

View File

@ -40,24 +40,19 @@ package body Exp_Sel is
-----------------------
function Build_Abort_Block
(Loc : Source_Ptr;
Abr_Blk_Ent : Entity_Id;
Cln_Blk_Ent : Entity_Id;
Blk : Node_Id) return Node_Id
(Loc : Source_Ptr;
Blk_Ent : Entity_Id;
Blk : Node_Id) return Node_Id
is
begin
return
Make_Block_Statement (Loc,
Identifier => New_Occurrence_Of (Abr_Blk_Ent, Loc),
Declarations => No_List,
Handled_Statement_Sequence =>
Make_Handled_Sequence_Of_Statements (Loc,
Statements =>
New_List (
Make_Implicit_Label_Declaration (Loc,
Defining_Identifier => Cln_Blk_Ent,
Defining_Identifier => Blk_Ent,
Label_Construct => Blk),
Blk),

View File

@ -31,24 +31,21 @@ with Types; use Types;
package Exp_Sel is
function Build_Abort_Block
(Loc : Source_Ptr;
Abr_Blk_Ent : Entity_Id;
Cln_Blk_Ent : Entity_Id;
Blk : Node_Id) return Node_Id;
(Loc : Source_Ptr;
Blk_Ent : Entity_Id;
Blk : Node_Id) return Node_Id;
-- Generate:
-- begin
-- Blk
-- exception
-- when Abort_Signal => null;
-- end;
-- Abr_Blk_Ent is the name of the generated block, Cln_Blk_Ent is the name
-- of the encapsulated cleanup block, Blk is the actual block name.
-- Blk_Ent is the identifier of Blk.
-- The exception handler code is built by Build_Abort_Block_Handler.
function Build_Abort_Block_Handler (Loc : Source_Ptr) return Node_Id;
-- Generate:
-- when others =>
-- null;
-- when Abort_Signal => null;
-- This is an exception handler to stop propagation of aborts, without
-- modifying the deferral level.