From: Eric Botcazou <[email protected]>
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.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/exp_ch9.adb | 117 +++++++++++++++++---------------------------
gcc/ada/exp_sel.adb | 13 ++---
gcc/ada/exp_sel.ads | 13 ++---
3 files changed, 53 insertions(+), 90 deletions(-)
diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb
index 9b82a9fcfdd..cf4d4d82256 100644
--- a/gcc/ada/exp_ch9.adb
+++ b/gcc/ada/exp_ch9.adb
@@ -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);
- 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),
-
- -- exception
+ -- Wrap the abortable block in an exception handling block
- Exception_Handlers => New_List (
- Make_Implicit_Exception_Handler (Loc,
-
- -- when Abort_Signal =>
- -- null;
+ -- Generate:
+ -- begin
+ -- Abortable_Block
+ -- exception
+ -- when Abort_Signal => null;
+ -- end;
- Exception_Choices =>
- New_List (New_Occurrence_Of (Stand.Abort_Signal, Loc)),
- Statements => New_List (Make_Null_Statement (Loc)))))),
+ Stmts := New_List (
+ Build_Abort_Block (Loc, Blk_Ent, Abortable_Block),
- -- 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
diff --git a/gcc/ada/exp_sel.adb b/gcc/ada/exp_sel.adb
index 3c04687db6b..9acd81b0497 100644
--- a/gcc/ada/exp_sel.adb
+++ b/gcc/ada/exp_sel.adb
@@ -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),
diff --git a/gcc/ada/exp_sel.ads b/gcc/ada/exp_sel.ads
index 47a49e6b78b..b21087ee658 100644
--- a/gcc/ada/exp_sel.ads
+++ b/gcc/ada/exp_sel.ads
@@ -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.
--
2.43.0