From: Eric Botcazou Date: Mon, 11 Nov 2024 23:18:00 +0000 (+0100) Subject: ada: Fix latent issue exposed by recent change in aggregate expansion X-Git-Tag: basepoints/gcc-16~3878 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=95bb4ef5cbe1fa0bc05802debcb25a9422e080a5;p=thirdparty%2Fgcc.git ada: Fix latent issue exposed by recent change in aggregate expansion The tag is not assigned when a compile-time known aggregate initializes an object declared with an address clause/aspect. gcc/ada/ChangeLog: * freeze.adb: Remove clauses for Exp_Ch3. (Check_Address_Clause): Always reassign the tag for an object of a tagged type if there is an initialization expression. --- diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index b52898f42121..9486d02f6818 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -33,7 +33,6 @@ with Einfo.Entities; use Einfo.Entities; with Einfo.Utils; use Einfo.Utils; with Elists; use Elists; with Errout; use Errout; -with Exp_Ch3; use Exp_Ch3; with Exp_Ch7; use Exp_Ch7; with Exp_Disp; use Exp_Disp; with Exp_Pakd; use Exp_Pakd; @@ -767,16 +766,23 @@ package body Freeze is Append_Freeze_Action (E, Make_Assignment_Statement (Sloc (Decl), Name => Lhs, - Expression => Expression (Decl))); + Expression => Init)); Set_No_Initialization (Decl); -- If the object is tagged, check whether the tag must be -- reassigned explicitly. - Tag_Assign := Make_Tag_Assignment (Decl); - if Present (Tag_Assign) then - Append_Freeze_Action (E, Tag_Assign); + if Is_Tagged_Type (Typ) and then Tagged_Type_Expansion then + Tag_Assign := + Make_Tag_Assignment_From_Type + (Sloc (Decl), + New_Occurrence_Of (E, Sloc (Decl)), + Underlying_Type (Typ)); + + if Present (Tag_Assign) then + Append_Freeze_Action (E, Tag_Assign); + end if; end if; end if; end if;