[Ada] Spurious error on universal access equality operator
authorEd Schonberg <schonberg@adacore.com>
Thu, 12 Dec 2019 10:03:48 +0000 (10:03 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 12 Dec 2019 10:03:48 +0000 (10:03 +0000)
2019-12-12  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_type.adb (Find_Unique_Type): A call to the universal
access equality operator requires one operand to be a universal
access, and the other to be an access type. There is no
requirement, as previously implied by this routine, that
pool-specific access types were illegal in this context.

From-SVN: r279304

gcc/ada/ChangeLog
gcc/ada/sem_type.adb

index 19e7fea30b95c92250e9de593851f5ac15644614..f18df8288961f8077b3a6aa8daf486921a10e8e4 100644 (file)
@@ -1,3 +1,11 @@
+2019-12-12  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_type.adb (Find_Unique_Type): A call to the universal
+       access equality operator requires one operand to be a universal
+       access, and the other to be an access type. There is no
+       requirement, as previously implied by this routine, that
+       pool-specific access types were illegal in this context.
+
 2019-12-12  Steve Baird  <baird@adacore.com>
 
        * sem_ch6.adb
index fc5052421cf0bebd854c8c529d191fb6e561c3ba..e5d01dd095cb34e9df2a041a4d710c77f5cda458 100644 (file)
@@ -2286,12 +2286,13 @@ package body Sem_Type is
       --  ration "type P is access Integer" and an anonymous access to Integer,
       --  P is convertible to "access Integer" by 4.6 (24.11-24.15), but there
       --  is no rule in 4.6 that allows "access Integer" to be converted to P.
+      --  Note that this does not preclude one operand to be a pool-specific
+      --  access type, as a previous version of this code enforced.
 
       elsif Ada_Version >= Ada_2005
         and then Ekind_In (Etype (L), E_Anonymous_Access_Type,
                                       E_Anonymous_Access_Subprogram_Type)
         and then Is_Access_Type (Etype (R))
-        and then Ekind (Etype (R)) /= E_Access_Type
       then
          return Etype (L);
 
@@ -2299,7 +2300,6 @@ package body Sem_Type is
         and then Ekind_In (Etype (R), E_Anonymous_Access_Type,
                                       E_Anonymous_Access_Subprogram_Type)
         and then Is_Access_Type (Etype (L))
-        and then Ekind (Etype (L)) /= E_Access_Type
       then
          return Etype (R);