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;

Reply via email to