From: Justin Squirek Date: Mon, 30 Mar 2020 09:35:22 +0000 (-0400) Subject: [Ada] Incorrect accessibility checks on functions calls X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f142237e2f70fe336b4fbe02c8f10d60ab38df67;p=gcc.git [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. --- 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