From f142237e2f70fe336b4fbe02c8f10d60ab38df67 Mon Sep 17 00:00:00 2001 From: Justin Squirek Date: Mon, 30 Mar 2020 05:35:22 -0400 Subject: [PATCH] [Ada] Incorrect accessibility checks on functions calls 2020-06-15 Justin Squirek 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 | 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 -- 2.30.2