From 79b7ab68bce24103adc388d184ff74755914cdda Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 22 Apr 2022 22:27:22 +0200 Subject: [PATCH] [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. --- gcc/ada/sem_attr.adb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 7b05cdc..e6e06f6 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); -- 2.7.4