https://gcc.gnu.org/g:d0a072e1f8b46eccf8fcc014e25cd47f17b86496
commit r15-4642-gd0a072e1f8b46eccf8fcc014e25cd47f17b86496 Author: Javier Miranda <mira...@adacore.com> Date: Thu Sep 26 09:18:48 2024 +0000 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: --- gcc/ada/sem_ch3.adb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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,