+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>
* sem_util.ads (Deepest_Type_Access_Level): New function; for the type
Field_Name := Chars (Defining_Identifier (C));
-- 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
-- the component names. Use of New_Reference_To to identify the
-- components would be incorrect because the wrong entities for
-- 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,
Make_Op_Ne (Loc,
Left_Opnd =>