mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-23 10:54:07 +08:00
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:
parent
0019e8dc76
commit
6a7849592d
@ -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
|
||||
|
||||
|
@ -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),
|
||||
|
||||
|
@ -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.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user