Commit 9b168a8b by Arnaud Charlet

[multiple changes]

2012-06-12  Hristian Kirtchev  <kirtchev@adacore.com>

	* exp_ch7.adb (Process_Transient_Objects): Renamed constant
	Requires_Hooking to Must_Hook and replace all occurrences of the name.
	(Requires_Hooking): New routine. Detect all contexts that require
	transient variable export to the outer finalizer due to a potential
	exception.

2012-06-12  Eric Botcazou  <ebotcazou@adacore.com>

	* einfo.ads: Minor correction in comment.

From-SVN: r188444
parent 7c4d75bf
2012-06-12 Hristian Kirtchev <kirtchev@adacore.com>
* exp_ch7.adb (Process_Transient_Objects): Renamed constant
Requires_Hooking to Must_Hook and replace all occurrences of the name.
(Requires_Hooking): New routine. Detect all contexts that require
transient variable export to the outer finalizer due to a potential
exception.
2012-06-12 Ed Schonberg <schonberg@adacore.com> 2012-06-12 Ed Schonberg <schonberg@adacore.com>
* sem_ch12.adb: Small adjustment. * sem_ch12.adb: Small adjustment.
......
...@@ -2671,7 +2671,7 @@ package Einfo is ...@@ -2671,7 +2671,7 @@ package Einfo is
-- appropriate external name for use by the linker. -- appropriate external name for use by the linker.
-- Is_Protected_Record_Type (synthesized) -- Is_Protected_Record_Type (synthesized)
-- Applies to all entities, true if Is_Concurrent_Record_Type -- Applies to all entities, true if Is_Concurrent_Record_Type is true and
-- Corresponding_Concurrent_Type is a protected type. -- Corresponding_Concurrent_Type is a protected type.
-- Is_Pure (Flag44) -- Is_Pure (Flag44)
......
...@@ -4327,10 +4327,47 @@ package body Exp_Ch7 is ...@@ -4327,10 +4327,47 @@ package body Exp_Ch7 is
Last_Object : Node_Id; Last_Object : Node_Id;
Related_Node : Node_Id) Related_Node : Node_Id)
is is
Requires_Hooking : constant Boolean := function Requires_Hooking return Boolean;
Nkind_In (N, N_Function_Call, -- Determine whether the context requires transient variable export
N_Procedure_Call_Statement); -- to the outer finalizer. This scenario arises when the context may
-- raise an exception.
----------------------
-- Requires_Hooking --
----------------------
function Requires_Hooking return Boolean is
function Is_Subprogram_Call (Nod : Node_Id) return Boolean;
-- Determine whether a particular node is a procedure of function
-- call.
------------------------
-- Is_Subprogram_Call --
------------------------
function Is_Subprogram_Call (Nod : Node_Id) return Boolean is
begin
return
Nkind_In (Nod, N_Function_Call, N_Procedure_Call_Statement);
end Is_Subprogram_Call;
-- Start of processing for Requires_Hooking
begin
-- The context is either a procedure or function call or an object
-- declaration initialized by such a call. In all these cases, the
-- calls are assumed to raise an exception.
return
Is_Subprogram_Call (N)
or else
(Nkind (N) = N_Object_Declaration
and then Is_Subprogram_Call (Expression (N)));
end Requires_Hooking;
-- Local variables
Must_Hook : constant Boolean := Requires_Hooking;
Built : Boolean := False; Built : Boolean := False;
Desig_Typ : Entity_Id; Desig_Typ : Entity_Id;
Fin_Block : Node_Id; Fin_Block : Node_Id;
...@@ -4395,7 +4432,7 @@ package body Exp_Ch7 is ...@@ -4395,7 +4432,7 @@ package body Exp_Ch7 is
-- enclosing sequence of statements where their corresponding -- enclosing sequence of statements where their corresponding
-- "hooks" are picked up by the finalization machinery. -- "hooks" are picked up by the finalization machinery.
if Requires_Hooking then if Must_Hook then
declare declare
Expr : Node_Id; Expr : Node_Id;
Ptr_Id : Entity_Id; Ptr_Id : Entity_Id;
...@@ -4470,7 +4507,7 @@ package body Exp_Ch7 is ...@@ -4470,7 +4507,7 @@ package body Exp_Ch7 is
-- Generate: -- Generate:
-- Temp := null; -- Temp := null;
if Requires_Hooking then if Must_Hook then
Append_To (Stmts, Append_To (Stmts,
Make_Assignment_Statement (Loc, Make_Assignment_Statement (Loc,
Name => New_Reference_To (Temp_Id, Loc), Name => New_Reference_To (Temp_Id, Loc),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment