https://gcc.gnu.org/g:a9714dce8245f87c937a8fdef52db15ca6571525
commit r15-461-ga9714dce8245f87c937a8fdef52db15ca6571525 Author: Gary Dismukes <dismu...@adacore.com> Date: Mon Feb 12 20:18:36 2024 +0000 ada: Compiler crash or errors on if_expression in container aggregate The compiler may either crash or incorrectly report errors when a component association in a container aggregate is an if_expression with an elsif part whose dependent expression is a call to a function returning a result that requires finalization. The compiler complains that a private type is expected, but a package or procedure name was found. This is due to the compiler improperly associating expanded calls to Finalize_Object with the aggregate, rather than the enclosing object declaration being initialized by the aggregate, which can result in the Finalize_Object procedure call being passed as an actual to the Add_Unnamed operation of the container type and leading to a type mismatch and the confusing error message. This is fixed by adjusting the code that locates the proper context for insertion of Finalize_Object calls to locate the enclosing declaration or statement rather than stopping at the aggregate. gcc/ada/ * exp_util.adb (Find_Hook_Context): Exclude N_*Aggregate Nkinds of Parent (Par) from the early return in the second loop of the In_Cond_Expr case, to prevent returning an aggregate from this function rather than the enclosing declaration or statement. Diff: --- gcc/ada/exp_util.adb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb index 4b1c5322f621..d9623e2ea40a 100644 --- a/gcc/ada/exp_util.adb +++ b/gcc/ada/exp_util.adb @@ -6412,7 +6412,9 @@ package body Exp_Util is and then Nkind (Parent (Par)) not in N_Function_Call | N_Procedure_Call_Statement | N_Entry_Call_Statement - + | N_Aggregate + | N_Delta_Aggregate + | N_Extension_Aggregate then return Par;