From: Javier Miranda <miranda@adacore.com>
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.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/sem_ch3.adb | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
@@ -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,