From: Arnaud Charlet Date: Thu, 9 Jul 2020 12:26:37 +0000 (-0400) Subject: [Ada] AI12-0352: Early derivation and equality of untagged types X-Git-Tag: basepoints/gcc-12~4198 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dc55492d63569da6b0885d9b3a7ee2cff61b9302;p=thirdparty%2Fgcc.git [Ada] AI12-0352: Early derivation and equality of untagged types gcc/ada/ * sem_ch6.adb (Check_Untagged_Equality): Check for AI12-0352. --- diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index 84474117f098..f314f1bde3fc 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -9118,10 +9118,27 @@ package body Sem_Ch6 is ("equality operator appears too late (Ada 2012)?y?", Eq_Op); end if; - -- No error detected + -- Finally check for AI12-0352: declaration of a user-defined primitive + -- equality operation for a record type T is illegal if it occurs after + -- a type has been derived from T. else - return; + Obj_Decl := Next (Parent (Typ)); + + while Present (Obj_Decl) and then Obj_Decl /= Decl loop + if Nkind (Obj_Decl) = N_Full_Type_Declaration + and then Etype (Defining_Identifier (Obj_Decl)) = Typ + then + Error_Msg_N + ("equality operator cannot appear after derivation", Eq_Op); + Error_Msg_NE + ("an equality operator for& cannot be declared after " + & "this point??", + Obj_Decl, Typ); + end if; + + Next (Obj_Decl); + end loop; end if; end Check_Untagged_Equality;