2007-04-06 Robert Dewar <dewar@adacore.com>
authorRobert Dewar <dewar@adacore.com>
Fri, 6 Apr 2007 09:14:55 +0000 (11:14 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 6 Apr 2007 09:14:55 +0000 (11:14 +0200)
commitbaa3441ddf0daabf8b0127a577121348906aa8b6
treecba8eae2edc131dbad1e78e6ab2c7326e84a7ed9
parentc5173b1ab367b28977368972a2aa9a04ef53da2e
2007-04-06  Robert Dewar  <dewar@adacore.com>

* a-except.adb, a-except.ads, a-except-2005.ads, a-except-2005.adb
(Local_Raise): New dummy procedure called when a raise is converted
to a local goto. Used for debugger to detect that the exception
is raised.

* debug.adb: Document new d.g flag (expand local raise statements to
gotos even if pragma Restriction (No_Exception_Propagation) is not set)

* exp_sel.adb: Use Make_Implicit_Exception_Handler

* exp_ch11.adb (Expand_Exception_Handlers): Use new flag -gnatw.x to
suppress warnings for unused handlers.
(Warn_If_No_Propagation):  Use new flag -gnatw.x to suppress
warnings for raise statements not handled locally.
(Get_RT_Exception_Entity): New function
(Get_Local_Call_Entity): New function
(Find_Local_Handler): New function
(Warn_If_No_Propagation): New procedure
(Expand_At_End_Handler): Call Make_Implicit_Handler
(Expand_Exception_Handlers): Major additions to deal with local handlers
(Expand_N_Raise_Constraint_Error, Expand_N_Raise_Program_Error,
Expand_N_Raise_Storage_Error, (Expand_N_Raise_Statement): Add handling
for local raise

* exp_ch11.ads (Get_RT_Exception_Entity): New function
(Get_Local_Call_Entity): New function

* gnatbind.adb (Restriction_List): Add No_Exception_Propagation to list
of restrictions that the binder will never suggest adding.

* par-ch11.adb (P_Exception_Handler): Set Local_Raise_Statements field
to No_Elist.

* restrict.adb (Check_Restricted_Unit): GNAT.Current_Exception may not
be with'ed in the presence of pragma Restriction
(No_Exception_Propagation).

* sem.adb (Analyze): Add entries for N_Push and N_Pop nodes

* sem_ch11.adb (Analyze_Exception_Handler): If there is a choice
parameter, then the handler is not a suitable target for a local raise,
and this is a violation of restriction No_Exception_Propagation.
(Analyze_Handled_Statements): Analyze choice parameters in exception
handlers before analyzing statement sequence (needed for proper
detection of local raise statements).
(Analyze_Raise_Statement): Reraise statement is a violation of the
No_Exception_Propagation restriction.

* s-rident.ads: Add new restriction No_Exception_Propagation

* tbuild.ads, tbuild.adb (Make_Implicit_Exception_Handler): New
function, like Make_Exception_Handler but sets Local_Raise_Statements
to No_List.
(Add_Unique_Serial_Number): Deal with case where this is called during
processing of configuration pragmas.

From-SVN: r123541
16 files changed:
gcc/ada/a-except-2005.adb
gcc/ada/a-except-2005.ads
gcc/ada/a-except.adb
gcc/ada/a-except.ads
gcc/ada/debug.adb
gcc/ada/exp_ch11.adb
gcc/ada/exp_ch11.ads
gcc/ada/exp_sel.adb
gcc/ada/gnatbind.adb
gcc/ada/par-ch11.adb
gcc/ada/restrict.adb
gcc/ada/s-rident.ads
gcc/ada/sem.adb
gcc/ada/sem_ch11.adb
gcc/ada/tbuild.adb
gcc/ada/tbuild.ads