From: squirek Date: Fri, 1 Nov 2024 16:33:02 +0000 (+0000) Subject: ada: Incorrect accessibilty level for library level subprograms X-Git-Tag: basepoints/gcc-16~2788 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3ff216b7121f832c87eaa03ece327c1e113e155a;p=thirdparty%2Fgcc.git ada: Incorrect accessibilty level for library level subprograms The patch fixes an issue in the compiler whereby accessibility level calculations for objects declared witihin library-level subprograms were done incorrectly - potentially allowing runtime accessibility checks to spuriously pass. gcc/ada/ChangeLog: * accessibility.adb: (Innermost_master_Scope_Depth): Add special case for expressions within library level subprograms. --- diff --git a/gcc/ada/accessibility.adb b/gcc/ada/accessibility.adb index b808e88b128a..8c85173aa34c 100644 --- a/gcc/ada/accessibility.adb +++ b/gcc/ada/accessibility.adb @@ -187,6 +187,15 @@ package body Accessibility is or else (Nkind (Node_Par) = N_Object_Renaming_Declaration and then Comes_From_Iterator (Node_Par)) then + -- Handle the case of expressions within library level + -- subprograms here by adding one to the level modifier. + + if Encl_Scop = Standard_Standard + and then Nkind (Node_Par) = N_Subprogram_Body + then + Master_Lvl_Modifier := Master_Lvl_Modifier + 1; + end if; + -- Note that in some rare cases the scope depth may not be -- set, for example, when we are in the middle of analyzing -- a type and the enclosing scope is said type. In that case