[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:
Justin Squirek 2020-07-21 15:06:37 -04:00 committed by Pierre-Marie de Rodat
parent 854f9a8167
commit 04b06947cb

View File

@ -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)));