From: Eric Botcazou Date: Fri, 22 Apr 2022 20:27:22 +0000 (+0200) Subject: [Ada] Do not analyze expression functions for dispatch tables X-Git-Tag: basepoints/gcc-14~6373 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79b7ab68bce24103adc388d184ff74755914cdda;p=thirdparty%2Fgcc.git [Ada] Do not analyze expression functions for dispatch tables There is no need to analyze expression functions that are primitives of a tagged type for its dispatch table because they will be analyzed at the end of the current scope. gcc/ada/ * sem_attr.adb (Resolve_Attribute) : Don't analyze the body of an expression function in the case of a dispatch table. --- diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 7b05cdc2bd6..e6e06f605fa 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -12144,11 +12144,15 @@ package body Sem_Attr is elsif Scope (Subp_Id) /= Current_Scope then null; + -- Dispatch tables are not a freeze point either + + elsif Nkind (Parent (N)) = N_Unchecked_Type_Conversion + and then Is_Dispatch_Table_Entity (Etype (Parent (N))) + then + null; + -- Analyze the body of the expression function to freeze - -- the expression. This takes care of the case where the - -- 'Access is part of dispatch table initialization and - -- the generated body of the expression function has not - -- been analyzed yet. + -- the expression. else Analyze (Subp_Body);