From: squirek <squi...@adacore.com> 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. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/accessibility.adb | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/gcc/ada/accessibility.adb b/gcc/ada/accessibility.adb index 298103377a7..a4129819109 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; -- 2.43.0