[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.
This commit is contained in:
parent
854f9a8167
commit
04b06947cb
@ -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)));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user