Commit 426908f8 by Robert Dewar Committed by Arnaud Charlet

exp_ch4.adb (Raise_Accessibility_Error): New procedure

2009-07-10  Robert Dewar  <dewar@adacore.com>

	* exp_ch4.adb (Raise_Accessibility_Error): New procedure

From-SVN: r149463
parent 1ded1a1f
...@@ -7519,6 +7519,11 @@ package body Exp_Ch4 is ...@@ -7519,6 +7519,11 @@ package body Exp_Ch4 is
-- assignment to temporary. If there is no change of representation, -- assignment to temporary. If there is no change of representation,
-- then the conversion node is unchanged. -- then the conversion node is unchanged.
procedure Raise_Accessibility_Error;
-- Called when we know that an accessibility check will fail. Rewrites
-- node N to an appropriate raise statement and outputs warning msgs.
-- The Etype of the raise node is set to Target_Type.
procedure Real_Range_Check; procedure Real_Range_Check;
-- Handles generation of range check for real target value -- Handles generation of range check for real target value
...@@ -7648,6 +7653,22 @@ package body Exp_Ch4 is ...@@ -7648,6 +7653,22 @@ package body Exp_Ch4 is
end if; end if;
end Handle_Changed_Representation; end Handle_Changed_Representation;
-------------------------------
-- Raise_Accessibility_Error --
-------------------------------
procedure Raise_Accessibility_Error is
begin
Rewrite (N,
Make_Raise_Program_Error (Sloc (N),
Reason => PE_Accessibility_Check_Failed));
Set_Etype (N, Target_Type);
Error_Msg_N ("?accessibility check failure", N);
Error_Msg_NE
("\?& will be raised at run time", N, Standard_Program_Error);
end Raise_Accessibility_Error;
---------------------- ----------------------
-- Real_Range_Check -- -- Real_Range_Check --
---------------------- ----------------------
...@@ -7884,10 +7905,7 @@ package body Exp_Ch4 is ...@@ -7884,10 +7905,7 @@ package body Exp_Ch4 is
and then Type_Access_Level (Operand_Type) > and then Type_Access_Level (Operand_Type) >
Type_Access_Level (Target_Type) Type_Access_Level (Target_Type)
then then
Rewrite (N, Raise_Accessibility_Error;
Make_Raise_Program_Error (Sloc (N),
Reason => PE_Accessibility_Check_Failed));
Set_Etype (N, Target_Type);
-- When the operand is a selected access discriminant the check needs -- When the operand is a selected access discriminant the check needs
-- to be made against the level of the object denoted by the prefix -- to be made against the level of the object denoted by the prefix
...@@ -7901,11 +7919,7 @@ package body Exp_Ch4 is ...@@ -7901,11 +7919,7 @@ package body Exp_Ch4 is
and then Object_Access_Level (Operand) > and then Object_Access_Level (Operand) >
Type_Access_Level (Target_Type) Type_Access_Level (Target_Type)
then then
Rewrite (N, Raise_Accessibility_Error;
Make_Raise_Program_Error (Sloc (N),
Reason => PE_Accessibility_Check_Failed));
Set_Etype (N, Target_Type);
return; return;
end if; end if;
end if; end if;
......
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