From: Javier Miranda Date: Thu, 26 Sep 2024 09:18:48 +0000 (+0000) Subject: ada: Spurious error when compiling in Syntax and Semantics Only mode X-Git-Tag: basepoints/gcc-16~4911 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d0a072e1f8b46eccf8fcc014e25cd47f17b86496;p=thirdparty%2Fgcc.git ada: Spurious error when compiling in Syntax and Semantics Only mode Compiling under switch -gnatc, the frontend reports spurious errors accessing components of class-wide tagged types. gcc/ada/ChangeLog: * sem_ch3.adb (Record_Type_Definition): For tagged types, add the missing decoration to the First_Entity in the corresponding class-wide type entity. --- diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index ea0a97bd39fc..00d5fe256d97 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -23074,6 +23074,23 @@ package body Sem_Ch3 is if Present (Variant_Part (Component_List (Def))) then Analyze (Variant_Part (Component_List (Def))); end if; + + -- For tagged types, when compiling in Generate_Code mode, the _Tag + -- component is added before the creation of the class-wide entity + -- and it is shared by that entity once it is built. + + -- However, when compiling in Check_Syntax or Check_Semantics modes, + -- since the _Tag component is not added to the tagged type entity, + -- the First_Entity of its class-wide type remains empty, and must + -- be explicitly set to prevent spurious errors from being reported. + + if Operating_Mode <= Check_Semantics + and then Is_Tagged_Type (T) + and then Present (First_Entity (T)) + and then No (First_Entity (Class_Wide_Type (T))) + then + Set_First_Entity (Class_Wide_Type (T), First_Entity (T)); + end if; end if; -- After completing the semantic analysis of the record definition,