[Ada] Plug legality loophole for equality operator of untagged record types
authorEric Botcazou <ebotcazou@adacore.com>
Sun, 3 Jul 2022 16:41:56 +0000 (18:41 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Wed, 13 Jul 2022 10:01:15 +0000 (10:01 +0000)
commit05e91ac1f89dc0b4757ac7e8ffaacd65bcdc4794
tree1534578479d1206ee12400292edf6461383b417c
parentb872d3fe67b54fef84ccafc7d39f1017a68332c2
[Ada] Plug legality loophole for equality operator of untagged record types

In Ada 2012, the RM 4.5.2(9.8) clause prevents an equality operator for an
untagged record type from being declared after the type is frozen.  While
the clause is implemented in GNAT, the implementation has a loophole which
lets subprogram bodies that are not the completion of a declaration pass
the check without being flagged.

gcc/ada/

* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Set Acts_As_Spec
earlier if the body is not the completion of a declaration.
(Check_Untagged_Equality): Deal with subprogram bodies that are
not the completion of a declaration and make sure that they are
not flagged when they cause the freezing of the type themselves.
Give a warning on the freezing point of the type in more cases.
* sem_res.adb (Resolve_Equality_Op): Revert latest change.
gcc/ada/sem_ch6.adb
gcc/ada/sem_res.adb