[COMMITTED,5/5] ada: Incorrect accessibilty level for library level subprograms

Message ID 20250110094237.775482-5-poulhies@adacore.com
State New
Headers
Series [COMMITTED,1/5] ada: Reorder syntactic node fields to match the Ada RM grammar |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-arm fail Patch failed to apply

Commit Message

Marc Poulhiès Jan. 10, 2025, 9:42 a.m. UTC
  From: squirek <squirek@adacore.com>

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.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/accessibility.adb | 9 +++++++++
 1 file changed, 9 insertions(+)
  

Patch

diff --git a/gcc/ada/accessibility.adb b/gcc/ada/accessibility.adb
index b808e88b128..8c85173aa34 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