[Ada] Incorrect accessibility checks on functions calls
authorJustin Squirek <squirek@adacore.com>
Mon, 30 Mar 2020 09:35:22 +0000 (05:35 -0400)
committerPierre-Marie de Rodat <derodat@adacore.com>
Mon, 15 Jun 2020 08:04:29 +0000 (04:04 -0400)
2020-06-15  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* sem_res.adb (Valid_Conversion): Add missing condition to
trigger proper static accessiblity failiures when the target
type is an anonymous access.

gcc/ada/sem_res.adb

index 89d78518bd38dea00f30a49292bb89a7f306bf49..13d925c7f18a8cc29ea12c06c60e83986d28f8d5 100644 (file)
@@ -13239,13 +13239,16 @@ package body Sem_Res is
             --  Check if the operand is deeper than the target type, taking
             --  care to avoid the case where we are converting a result of a
             --  function returning an anonymous access type since the "master
-            --  of the call" would be target type of the conversion in all
-            --  cases - see RM 10.3/3.
+            --  of the call" would be target type of the conversion unless
+            --  the target type is anonymous access as well - see RM 3.10.2
+            --  (10.3/3).
 
             elsif Type_Access_Level (Opnd_Type) >
                     Deepest_Type_Access_Level (Target_Type)
-              and then not (Nkind (Associated_Node_For_Itype (Opnd_Type)) =
-                                     N_Function_Specification)
+              and then (Nkind (Associated_Node_For_Itype (Opnd_Type)) /=
+                         N_Function_Specification
+                        or else Ekind (Target_Type) in
+                                  Anonymous_Access_Kind)
             then
                --  In an instance, this is a run-time check, but one we know
                --  will fail, so generate an appropriate warning. The raise