From: Gary Dismukes Date: Wed, 28 Sep 2022 17:22:26 +0000 (-0400) Subject: ada: Accessibility error incorrectly flagged on call within Pre'Class expression X-Git-Tag: basepoints/gcc-14~4092 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f775d362aa73353ce07a51c259ca0a3e1f41ba3b;p=thirdparty%2Fgcc.git ada: Accessibility error incorrectly flagged on call within Pre'Class expression The compiler was wrongly reporting an error on a function call within a Pre'Class expression when a formal of the aspect's subprogram was passed to an aliased formal. This occurred due to the call appearing with the return statement of the wrapper function created for the precondition, but the accessibility error check should only be done for return statements that appear in the source program. gcc/ada/ * sem_ch4.adb (Analyze_Call): Add test of Comes_From_Source on the enclosing subprogram's Entity_Id for determining whether to perform the compile-time accessibility check on actuals passed to aliased formals in a function call occurring within a return statement. That test excludes cases where the call occurs within the return statement of a Pre'Class wrapper function. --- diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index ceaf66bd3e2a..6824941fa349 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -1467,12 +1467,17 @@ package body Sem_Ch4 is end if; -- Check the accessibility level for actuals for explicitly aliased - -- formals. + -- formals when a function call appears within a return statement. + -- This is only checked if the enclosing subprogram Comes_From_Source, + -- to avoid issuing errors on calls occurring in wrapper subprograms + -- (for example, where the call is part of an expression of an aspect + -- associated with a wrapper, such as Pre'Class). if Nkind (N) = N_Function_Call and then Comes_From_Source (N) and then Present (Nam_Ent) and then In_Return_Value (N) + and then Comes_From_Source (Current_Subprogram) then declare Form : Node_Id;