Commit 6d4e4fbc by Javier Miranda Committed by Arnaud Charlet

exp_ch3.adb (Make_Eq_If): If the etype of the _parent component is an interface…

exp_ch3.adb (Make_Eq_If): If the etype of the _parent component is an interface type then do not generate...

2011-08-30  Javier Miranda  <miranda@adacore.com>

	* exp_ch3.adb (Make_Eq_If): If the etype of the _parent component is an
	interface type then do not generate code to compare this component.
	Required since they have no components and their equality operator is
	abstract.

From-SVN: r178300
parent d15f9422
2011-08-30 Javier Miranda <miranda@adacore.com>
* exp_ch3.adb (Make_Eq_If): If the etype of the _parent component is an
interface type then do not generate code to compare this component.
Required since they have no components and their equality operator is
abstract.
2011-08-30 Steve Baird <baird@adacore.com> 2011-08-30 Steve Baird <baird@adacore.com>
* sem_util.ads (Deepest_Type_Access_Level): New function; for the type * sem_util.ads (Deepest_Type_Access_Level): New function; for the type
......
...@@ -8040,14 +8040,20 @@ package body Exp_Ch3 is ...@@ -8040,14 +8040,20 @@ package body Exp_Ch3 is
Field_Name := Chars (Defining_Identifier (C)); Field_Name := Chars (Defining_Identifier (C));
-- The tags must not be compared: they are not part of the value. -- The tags must not be compared: they are not part of the value.
-- Ditto for the controller component, if present. -- Ditto for parent interfaces because their equality operator is
-- abstract.
-- Note also that in the following, we use Make_Identifier for -- Note also that in the following, we use Make_Identifier for
-- the component names. Use of New_Reference_To to identify the -- the component names. Use of New_Reference_To to identify the
-- components would be incorrect because the wrong entities for -- components would be incorrect because the wrong entities for
-- discriminants could be picked up in the private type case. -- discriminants could be picked up in the private type case.
if Field_Name /= Name_uTag then if Field_Name = Name_uParent
and then Is_Interface (Etype (Defining_Identifier (C)))
then
null;
elsif Field_Name /= Name_uTag then
Evolve_Or_Else (Cond, Evolve_Or_Else (Cond,
Make_Op_Ne (Loc, Make_Op_Ne (Loc,
Left_Opnd => Left_Opnd =>
......
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