This patch fixes the compiler whereby conditional expressions used as
actuals for anonymous access type in subprogram calls may result in an
infinite loop when one of the branches of said conditional expression
expands to an N_Expression_With_Actions
Tested on x86_64-pc-linux-gnu, committed on trunk
gcc/ada/
* exp_ch6.adb (Expand_Branch): Verify the original node is a
conditional expression before recursing further.
(Insert_Level_Assign): Transform assertion into an explicit
raise.
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb
--- a/gcc/ada/exp_ch6.adb
+++ b/gcc/ada/exp_ch6.adb
@@ -3947,6 +3947,11 @@ package body Exp_Ch6 is
if Nkind (Expression (Assn)) =
N_Expression_With_Actions
+ and then
+ Nkind_In
+ (Original_Node (Expression (Assn)),
+ N_Case_Expression,
+ N_If_Expression)
then
Insert_Level_Assign (Expression (Assn));
@@ -3983,7 +3988,10 @@ package body Exp_Ch6 is
N_If_Statement);
Next (Cond);
- pragma Assert (Present (Cond));
+
+ if No (Cond) then
+ raise Program_Error;
+ end if;
end loop;
-- Iterate through if expression branches