Commit ad5edba5 by Arnaud Charlet

[multiple changes]

2014-08-04  Hristian Kirtchev  <kirtchev@adacore.com>

	* sem_ch8.adb (Build_Class_Wide_Wrapper): Mark the primitive as
	referenced once resolution has taken place.

2014-08-04  Gary Dismukes  <dismukes@adacore.com>

	* exp_ch4.adb (Expand_N_Type_Conversion): Don't
	compare access levels in the case where the target type is the
	anonymous type of an access discriminant, since the level of
	such types is defined based on context. Add comment.

From-SVN: r213534
parent b6621d10
2014-08-04 Hristian Kirtchev <kirtchev@adacore.com> 2014-08-04 Hristian Kirtchev <kirtchev@adacore.com>
* sem_ch8.adb (Build_Class_Wide_Wrapper): Mark the primitive as
referenced once resolution has taken place.
2014-08-04 Gary Dismukes <dismukes@adacore.com>
* exp_ch4.adb (Expand_N_Type_Conversion): Don't
compare access levels in the case where the target type is the
anonymous type of an access discriminant, since the level of
such types is defined based on context. Add comment.
2014-08-04 Hristian Kirtchev <kirtchev@adacore.com>
* sem_ch8.adb (Build_Class_Wide_Wrapper): Handle various special * sem_ch8.adb (Build_Class_Wide_Wrapper): Handle various special
cases related to equality. Remove the special processing cases related to equality. Remove the special processing
for dispatching abstract subprograms as it is not needed. for dispatching abstract subprograms as it is not needed.
......
...@@ -10417,12 +10417,24 @@ package body Exp_Ch4 is ...@@ -10417,12 +10417,24 @@ package body Exp_Ch4 is
-- level of the target type, then force Program_Error. Note that this -- level of the target type, then force Program_Error. Note that this
-- can only occur for cases where the attribute is within the body of -- can only occur for cases where the attribute is within the body of
-- an instantiation (otherwise the conversion will already have been -- an instantiation (otherwise the conversion will already have been
-- rejected as illegal). Note: warnings are issued by the analyzer -- rejected as illegal). (Note: warnings are issued by the analyzer
-- for the instance cases. -- for the instance cases.) The case where the target type is an
-- anonymous access type of a discriminant is excluded, because the
-- level of such a type depends on the context and currently the
-- level returned for such types is zero, resulting in warnings about
-- about check failures in certain legal cases involving class-wide
-- interfaces as the designated type (some cases, such as return
-- statements, are checked at run time, but not clear if these are
-- handled right in general, see 3.10.2(12/2-12.5/3) ???).
elsif In_Instance_Body elsif In_Instance_Body
and then Type_Access_Level (Operand_Type) > and then
Type_Access_Level (Target_Type) not (Ekind (Target_Type) = E_Anonymous_Access_Type
and then Present (Associated_Node_For_Itype (Target_Type))
and then Nkind (Associated_Node_For_Itype (Target_Type)) =
N_Discriminant_Specification)
and then
Type_Access_Level (Operand_Type) > Type_Access_Level (Target_Type)
then then
Raise_Accessibility_Error; Raise_Accessibility_Error;
......
...@@ -2290,12 +2290,13 @@ package body Sem_Ch8 is ...@@ -2290,12 +2290,13 @@ package body Sem_Ch8 is
return; return;
end if; end if;
-- Set the proper entity of the renamed generic formal subprogram -- Set the proper entity of the renamed generic formal subprogram,
-- and reset its overloaded status now that resolution has finally -- reset its overloaded status and mark the primitive as referenced
-- taken place. -- now that resolution has finally taken place.
Set_Entity (Nam, Prim_Op); Set_Entity (Nam, Prim_Op);
Set_Is_Overloaded (Nam, False); Set_Is_Overloaded (Nam, False);
Set_Referenced (Prim_Op);
-- Step 3: Create the declaration and the body of the wrapper, insert -- Step 3: Create the declaration and the body of the wrapper, insert
-- all the pieces into the tree. -- all the pieces into the tree.
......
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