[Ada] Compiler crash on limited conditional expressions
authorBob Duff <duff@adacore.com>
Thu, 12 Nov 2020 19:40:39 +0000 (14:40 -0500)
committerPierre-Marie de Rodat <derodat@adacore.com>
Mon, 30 Nov 2020 14:16:19 +0000 (09:16 -0500)
gcc/ada/

* exp_ch3.adb (Expand_N_Object_Declaration): Avoid crash in case
of conditional expression.

gcc/ada/exp_ch3.adb

index f8b6ee68d6a31eda8b48199d369cd2cbaafba4ed..bd2de67fa8a3898546522c57046d23ede8ef29a1 100644 (file)
@@ -7403,12 +7403,12 @@ package body Exp_Ch3 is
 
                --  If we cannot convert the expression into a renaming we must
                --  consider it an internal error because the backend does not
-               --  have support to handle it. Also, when a raise expression is
-               --  encountered we ignore it since it doesn't return a value and
-               --  thus cannot trigger a copy.
+               --  have support to handle it. But avoid crashing on a raise
+               --  expression or conditional expression.
 
-               elsif Nkind (Original_Node (Expr_Q)) /= N_Raise_Expression then
-                  pragma Assert (False);
+               elsif Nkind (Original_Node (Expr_Q)) not in
+                 N_Raise_Expression | N_If_Expression | N_Case_Expression
+               then
                   raise Program_Error;
                end if;