diff options
author | Arnaud Charlet <charlet@adacore.com> | 2020-04-07 11:05:59 -0400 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-06-16 09:07:15 -0400 |
commit | d51bf619f723292fd1475deb58b7b14144495648 (patch) | |
tree | 379b3136c732eac2b97401a2e7789b4d3084adb8 /gcc/ada/sem_ch4.adb | |
parent | 3c9a82fec0e08b24ee49c94c3cdfd6c426042f64 (diff) | |
download | gcc-d51bf619f723292fd1475deb58b7b14144495648.zip gcc-d51bf619f723292fd1475deb58b7b14144495648.tar.gz gcc-d51bf619f723292fd1475deb58b7b14144495648.tar.bz2 |
[Ada] ACATS C452005/C452006 memberships use wrong equality operation
2020-06-16 Arnaud Charlet <charlet@adacore.com>
gcc/ada/
* sem_aux.ads, sem_aux.adb (Is_Record_Or_Limited_Type): New
function.
* exp_ch4.adb, sem_ch4.adb (Analyze_Membership_Op,
Expand_Set_Membership.Make_Cond): Choose between primitive and
predefined equality for membership tests.
Diffstat (limited to 'gcc/ada/sem_ch4.adb')
-rw-r--r-- | gcc/ada/sem_ch4.adb | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 445122f..fe8aed5 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -3018,10 +3018,14 @@ package body Sem_Ch4 is Op := Make_Op_Ne (Loc, Left_Opnd => L, Right_Opnd => R); end if; - -- We reset the Entity since we do not want to bypass the operator - -- resolution. + if Is_Record_Or_Limited_Type (Etype (L)) then + + -- We reset the Entity in order to use the primitive equality + -- of the type, as per RM 4.5.2 (28.1/4). + + Set_Entity (Op, Empty); + end if; - Set_Entity (Op, Empty); Rewrite (N, Op); Analyze (N); return; |