+2011-08-29 Tristan Gingold <gingold@adacore.com>
+
+ * a-exexpr.adb (Setup_Exception): Removed.
+ * a-exexpr-gcc.adb (Setup_Exception): Removed.
+ * a-except.adb (Exception_Propagation): Removed.
+ * a-except-2005.adb (Setup_Exception): Removed.
+ (Reraise): Remove call to Setup_Exception.
+ (Reraise_Occurrence): Ditto.
+ (Reraise_Occurrence_Always): Ditto.
+ (Reraise_Occurrence_No_Defer): Ditto.
+ (Transfer_Occurrence): Ditto.
+ * a-exexda.adb (Set_Exception_C_Msg): Remove call to Setup_Exception.
+ (Set_Exception_Msg): Ditto.
+
2011-08-29 Robert Dewar <dewar@adacore.com>
* a-convec.adb, exp_disp.adb: Minor reformatting.
-- Exception propagation routines --
------------------------------------
- procedure Setup_Exception
- (Excep : EOA;
- Current : EOA;
- Reraised : Boolean := False);
- -- Perform the necessary operations to prepare the propagation of Excep
- -- in a task where Current is the current occurrence. Excep is assumed
- -- to be a valid (non null) pointer.
- --
- -- This should be called before any (re-)setting of the current
- -- occurrence. Any such (re-)setting shall take care *not* to clobber
- -- the Private_Data component.
- --
- -- Having Current provided as an argument (instead of retrieving it via
- -- Get_Current_Excep internally) is required to allow one task to setup
- -- an exception for another task, which is used by Transfer_Occurrence.
-
procedure Propagate_Exception
(E : Exception_Id;
From_Signal_Handler : Boolean);
Excep : constant EOA := Get_Current_Excep.all;
begin
- Exception_Propagation.Setup_Exception (Excep, Excep);
-
Excep.Exception_Raised := False;
Excep.Id := E;
Excep.Num_Tracebacks := 0;
if not ZCX_By_Default then
Abort_Defer.all;
end if;
- Exception_Propagation.Setup_Exception (Excep, Excep, Reraised => True);
Raise_Current_Excep (Excep.Id);
end Reraise;
Abort_Defer.all;
end if;
- Exception_Propagation.Setup_Exception
- (X'Unrestricted_Access, Get_Current_Excep.all, Reraised => True);
Save_Occurrence_No_Private (Get_Current_Excep.all.all, X);
Raise_Current_Excep (X.Id);
end if;
Abort_Defer.all;
end if;
- Exception_Propagation.Setup_Exception
- (X'Unrestricted_Access, Get_Current_Excep.all, Reraised => True);
Save_Occurrence_No_Private (Get_Current_Excep.all.all, X);
Raise_Current_Excep (X.Id);
end Reraise_Occurrence_Always;
procedure Reraise_Occurrence_No_Defer (X : Exception_Occurrence) is
begin
- Exception_Propagation.Setup_Exception
- (X'Unrestricted_Access, Get_Current_Excep.all, Reraised => True);
Save_Occurrence_No_Private (Get_Current_Excep.all.all, X);
Raise_Current_Excep (X.Id);
end Reraise_Occurrence_No_Defer;
Source : Exception_Occurrence)
is
begin
- -- Setup Target as an exception to be propagated in the calling task
- -- (rendezvous-wise), taking care not to clobber the associated private
- -- data. Target is expected to be a pointer to the calling task's
- -- fixed TSD occurrence, which is very different from Get_Current_Excep
- -- here because this subprogram is called from the called task.
-
- Exception_Propagation.Setup_Exception (Target, Target);
Save_Occurrence_No_Private (Target.all, Source);
end Transfer_Occurrence;
end Exception_Traces;
- package Exception_Propagation is
-
- procedure Setup_Exception
- (Excep : EOA;
- Current : EOA;
- Reraised : Boolean := False);
- -- Dummy routine used to share a-exexda.adb, do nothing
-
- end Exception_Propagation;
-
package Stream_Attributes is
--------------------------------
-- This package can be easily dummied out if we do not want the basic
-- support for exception messages (such as in Ada 83).
- package body Exception_Propagation is
-
- procedure Setup_Exception
- (Excep : EOA;
- Current : EOA;
- Reraised : Boolean := False)
- is
- pragma Warnings (Off, Excep);
- pragma Warnings (Off, Current);
- pragma Warnings (Off, Reraised);
- begin
- null;
- end Setup_Exception;
-
- end Exception_Propagation;
-
----------------------
-- Exception_Traces --
----------------------
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2010, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2011, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
-- Start of processing for Set_Exception_C_Msg
begin
- Exception_Propagation.Setup_Exception (Excep, Excep);
Excep.Exception_Raised := False;
Excep.Id := Id;
Excep.Num_Tracebacks := 0;
Excep : constant EOA := Get_Current_Excep.all;
begin
- Exception_Propagation.Setup_Exception (Excep, Excep);
Excep.Exception_Raised := False;
Excep.Msg_Length := Len;
Excep.Msg (1 .. Len) := Message (First .. First + Len - 1);
return URC_NO_REASON;
end CleanupUnwind_Handler;
- ---------------------
- -- Setup_Exception --
- ---------------------
-
- -- In the GCC-EH implementation of the propagation scheme, this
- -- subprogram should be understood as: Setup the exception occurrence
- -- stack headed at Current for a forthcoming raise of Excep.
-
- procedure Setup_Exception
- (Excep : EOA;
- Current : EOA;
- Reraised : Boolean := False)
- is
- pragma Unreferenced (Excep, Current, Reraised);
-
- begin
- -- In the GNAT-SJLJ case this "stack" only exists implicitly, by way of
- -- local occurrence declarations together with save/restore operations
- -- generated by the front-end, and this routine has nothing to do.
-
- null;
- end Setup_Exception;
-
-------------------------
-- Setup_Current_Excep --
-------------------------
pragma No_Return (builtin_longjmp);
pragma Import (Intrinsic, builtin_longjmp, "__builtin_longjmp");
- ---------------------
- -- Setup_Exception --
- ---------------------
-
- procedure Setup_Exception
- (Excep : EOA;
- Current : EOA;
- Reraised : Boolean := False)
- is
- pragma Unreferenced (Excep, Current, Reraised);
- begin
- -- In the GNAT-SJLJ case this "stack" only exists implicitly, by way of
- -- local occurrence declarations together with save/restore operations
- -- generated by the front-end, and this routine has nothing to do.
-
- null;
- end Setup_Exception;
-
-------------------------
-- Propagate_Exception --
-------------------------