From: Justin Squirek Date: Tue, 21 Jul 2020 19:06:37 +0000 (-0400) Subject: [Ada] Hang on cond expression as actual for anonymous access formal X-Git-Tag: upstream/12.2.0~12852 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=04b06947cbcfebaa1ba5beb3c9bf086af5beabab;p=platform%2Fupstream%2Fgcc.git [Ada] Hang on cond expression as actual for anonymous access formal gcc/ada/ * exp_ch6.adb (Expand_Call_Helper): Properly handle the case where the condition of a conditional expression has been optimized out when calculating the value of an extra accessibility parameter. --- diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb index 5d8e48b..dd555a2 100644 --- a/gcc/ada/exp_ch6.adb +++ b/gcc/ada/exp_ch6.adb @@ -4014,20 +4014,23 @@ package body Exp_Ch6 is -- Find the relevant statement in the actions Cond := First (Actions (Branch)); - loop + while Present (Cond) loop exit when Nkind (Cond) in N_Case_Statement | N_If_Statement; Next (Cond); - - if No (Cond) then - raise Program_Error; - end if; end loop; + -- The conditional expression may have been + -- optimized away, so examine the actions in + -- the branch. + + if No (Cond) then + Expand_Branch (Last (Actions (Branch))); + -- Iterate through if expression branches - if Nkind (Cond) = N_If_Statement then + elsif Nkind (Cond) = N_If_Statement then Expand_Branch (Last (Then_Statements (Cond))); Expand_Branch (Last (Else_Statements (Cond)));