aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2019-08-12 09:00:59 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-08-12 09:00:59 +0000
commit6ab24ed7528b0375c49e4416f825a90bdca63454 (patch)
tree1d6e2c2b246d35fda44c4b7471e967412682ed46 /gcc/ada
parent2d56744e3bfcf3cc27f4100b1903b2443d858f13 (diff)
downloadgcc-6ab24ed7528b0375c49e4416f825a90bdca63454.zip
gcc-6ab24ed7528b0375c49e4416f825a90bdca63454.tar.gz
gcc-6ab24ed7528b0375c49e4416f825a90bdca63454.tar.bz2
[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
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/ada/sem_ch6.adb3
2 files changed, 8 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 351cc49..3c22a90 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -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
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 25ee705..3c026bf 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -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;