From: Eric Botcazou <ebotca...@adacore.com>

The problem occurs when the compiler is trying to find a context to which
it can hoist finalization actions coming from the if-expression, because
Find_Hook_Context incorrectly returns the N_Elsif_Part node.

gcc/ada/ChangeLog:
        PR ada/114640
        * exp_util.adb (Find_Hook_Context): For a node present within a
        conditional expression, do not return an N_Elsif_Part node.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/exp_util.adb | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index 5aa0f77006c..8b9ce9a2acc 100644
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -6742,6 +6742,7 @@ package body Exp_Util is
                                         | N_Aggregate
                                         | N_Delta_Aggregate
                                         | N_Extension_Aggregate
+                                        | N_Elsif_Part
               and then Nkind (Parent (Par)) not in N_Function_Call
                                                  | N_Procedure_Call_Statement
                                                  | N_Entry_Call_Statement
-- 
2.43.0

Reply via email to