From 6d4e4fbcd2f5c5a73d263c4f45b0438d7dec9492 Mon Sep 17 00:00:00 2001 From: Javier Miranda Date: Tue, 30 Aug 2011 13:23:33 +0000 Subject: [PATCH] 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 * 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 --- gcc/ada/ChangeLog | 7 +++++++ gcc/ada/exp_ch3.adb | 10 ++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 9a4bc026579..33ee4765a68 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2011-08-30 Javier Miranda + + * 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 * sem_util.ads (Deepest_Type_Access_Level): New function; for the type diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index 3f11e0efcd5..b1d9b9c9e64 100644 --- a/gcc/ada/exp_ch3.adb +++ b/gcc/ada/exp_ch3.adb @@ -8040,14 +8040,20 @@ package body Exp_Ch3 is 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 => -- 2.30.2