From: squirek Date: Tue, 13 Aug 2024 12:06:52 +0000 (+0000) Subject: ada: Spurious error on abstract primitive with access formals X-Git-Tag: basepoints/gcc-16~4416 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9bba882f922e69abc72fa71520be649258cfd856;p=thirdparty%2Fgcc.git ada: Spurious error on abstract primitive with access formals This patch fixes an issue in the compiler whereby using anonymous access types as abstract overridden subprogram formals for a derived abtract type may lead to compile-time errors. gcc/ada/ChangeLog: * accessibility.adb (Type_Access_Level): Add handling for subprogram aliases. --- diff --git a/gcc/ada/accessibility.adb b/gcc/ada/accessibility.adb index 298103377a7b..a4129819109d 100644 --- a/gcc/ada/accessibility.adb +++ b/gcc/ada/accessibility.adb @@ -2331,7 +2331,20 @@ package body Accessibility is return Scope_Depth (Standard_Standard); end if; - return Scope_Depth (Enclosing_Dynamic_Scope (Btyp)); + -- It is possible that the current scope is an aliased subprogram - + -- this can happen when an abstract primitive from a root type is not + -- not visible. + + if Is_Subprogram (Enclosing_Dynamic_Scope (Btyp)) + and then Present (Alias (Enclosing_Dynamic_Scope (Btyp))) + then + return Scope_Depth (Ultimate_Alias (Enclosing_Dynamic_Scope (Btyp))); + + -- Otherwise, simply use the enclosing dynamic scope + + else + return Scope_Depth (Enclosing_Dynamic_Scope (Btyp)); + end if; end Type_Access_Level; end Accessibility;