[Ada] Simplify detection of a parent interface equality
Commit Message
Replace subtle conditions on First_Entity/Last_Entity with a
straightforward Number_Formals/First_Formal/Last_Formal.
Code cleanup related to handling of dispatching equality in SPARK.
Tested on x86_64-pc-linux-gnu, committed on trunk
gcc/ada/
* exp_ch3.adb (Predefined_Primitive_Bodies): Simplify detection
of existing equality operator.
@@ -10972,16 +10972,13 @@ package body Exp_Ch3 is
while Present (Prim) loop
if Chars (Node (Prim)) = Name_Op_Eq
and then not Is_Internal (Node (Prim))
- and then Present (First_Entity (Node (Prim)))
-- The predefined equality primitive must have exactly two
- -- formals whose type is this tagged type
+ -- formals whose type is this tagged type.
- and then Present (Last_Entity (Node (Prim)))
- and then Next_Entity (First_Entity (Node (Prim)))
- = Last_Entity (Node (Prim))
- and then Etype (First_Entity (Node (Prim))) = Tag_Typ
- and then Etype (Last_Entity (Node (Prim))) = Tag_Typ
+ and then Number_Formals (Node (Prim)) = 2
+ and then Etype (First_Formal (Node (Prim))) = Tag_Typ
+ and then Etype (Last_Formal (Node (Prim))) = Tag_Typ
then
Eq_Needed := False;
Eq_Name := No_Name;