[Ada] Improper error message on equality op with different operand types

2019-08-12  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_ch6.adb (heck_Untagged_Equality): Verify that user-defined
	equality has the same profile as the predefined equality before
	applying legality rule in RM 4.5.2 (9.8).

gcc/testsuite/

	* gnat.dg/equal10.adb, gnat.dg/equal10.ads: New testcase.

From-SVN: r274297
This commit is contained in:
Ed Schonberg 2019-08-12 09:00:59 +00:00 committed by Pierre-Marie de Rodat
parent 2d56744e3b
commit 6ab24ed752
5 changed files with 24 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2019-08-12 Ed Schonberg <schonberg@adacore.com>
* sem_ch6.adb (heck_Untagged_Equality): Verify that user-defined
equality has the same profile as the predefined equality before
applying legality rule in RM 4.5.2 (9.8).
2019-08-12 Bob Duff <duff@adacore.com>
* libgnat/a-except.ads: Update obsolete comment, still making

View File

@ -8420,11 +8420,12 @@ package body Sem_Ch6 is
begin
-- This check applies only if we have a subprogram declaration with an
-- untagged record type.
-- untagged record type that is conformant to the predefined op.
if Nkind (Decl) /= N_Subprogram_Declaration
or else not Is_Record_Type (Typ)
or else Is_Tagged_Type (Typ)
or else Etype (Next_Formal (First_Formal (Eq_Op))) /= Typ
then
return;
end if;

View File

@ -1,3 +1,7 @@
2019-08-12 Ed Schonberg <schonberg@adacore.com>
* gnat.dg/equal10.adb, gnat.dg/equal10.ads: New testcase.
2019-08-12 Gary Dismukes <dismukes@adacore.com>
* gnat.dg/suppress_initialization2.adb,

View File

@ -0,0 +1,5 @@
-- { dg-do compile }
package body Equal10 is
procedure Dummy is null;
end Equal10;

View File

@ -0,0 +1,7 @@
package Equal10 is
type R is record X : Integer; end record;
Rr : R;
function "=" (Y : R; Z : Integer) return Boolean is
(Y.X = Z);
procedure Dummy;
end Equal10;