sem_res.adb (Valid_Conversion): An anonymous access_to_subprogram type has a deeper...
authorEd Schonberg <schonberg@adacore.com>
Wed, 28 May 2008 15:56:02 +0000 (17:56 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 28 May 2008 15:56:02 +0000 (17:56 +0200)
2008-05-28  Ed Schonberg  <schonberg@adacore.com>

* sem_res.adb (Valid_Conversion): An anonymous access_to_subprogram
type has a deeper level than any master only when it is the type of an
access parameter.

From-SVN: r136113

gcc/ada/sem_res.adb

index d1f2cefc803aaa9dca83a0dba2a9a7d8cba6f810..b6c72b44cde41e61b7603e5174c6d8d3a81593c1 100644 (file)
@@ -9434,7 +9434,9 @@ package body Sem_Res is
             end if;
          end;
 
-      --  Subprogram access types
+      --  access to subprogram types. If the operand is an access parameter,
+      --  the type has a deeper accessibility that any master, and cannot
+      --  be assigned.
 
       elsif (Ekind (Target_Type) = E_Access_Subprogram_Type
                or else
@@ -9443,6 +9445,8 @@ package body Sem_Res is
       then
          if
            Ekind (Base_Type (Opnd_Type)) = E_Anonymous_Access_Subprogram_Type
+             and then Is_Entity_Name (Operand)
+             and then Ekind (Entity (Operand)) = E_In_Parameter
          then
             Error_Msg_N
               ("illegal attempt to store anonymous access to subprogram",
@@ -9452,13 +9456,9 @@ package body Sem_Res is
                "(RM 3.10.2 (13))",
                Operand);
 
-            if Is_Entity_Name (Operand)
-              and then Ekind (Entity (Operand)) = E_In_Parameter
-            then
-               Error_Msg_NE
-                 ("\use named access type for& instead of access parameter",
-                  Operand, Entity (Operand));
-            end if;
+            Error_Msg_NE
+             ("\use named access type for& instead of access parameter",
+               Operand, Entity (Operand));
          end if;
 
          --  Check that the designated types are subtype conformant