[gcc/devel/gccgo] [Ada] Incorrect accessibility checks on functions calls

Ian Lance Taylor ian@gcc.gnu.org
Sun Jul 12 19:34:52 GMT 2020


https://gcc.gnu.org/g:f142237e2f70fe336b4fbe02c8f10d60ab38df67

commit f142237e2f70fe336b4fbe02c8f10d60ab38df67
Author: Justin Squirek <squirek@adacore.com>
Date:   Mon Mar 30 05:35:22 2020 -0400

    [Ada] Incorrect accessibility checks on functions calls
    
    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.

Diff:
---
 gcc/ada/sem_res.adb | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index 89d78518bd3..13d925c7f18 100644
--- a/gcc/ada/sem_res.adb
+++ b/gcc/ada/sem_res.adb
@@ -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


More information about the Gcc-cvs mailing list