From: Javier Miranda Date: Sun, 20 Mar 2022 11:36:25 +0000 (+0000) Subject: [Ada] Crash freezing declaration that will raise constraint error X-Git-Tag: basepoints/gcc-14~6681 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6c72dc7d602f45d086a9651e623a4e68fa96fab6;p=thirdparty%2Fgcc.git [Ada] Crash freezing declaration that will raise constraint error When the compiler is built with assertions enabled and processes the following declarations: type Vector_Boolean_Array is array (1 .. 10) of Boolean; O2 : constant Vector_Boolean_Array := [for J in 2 => True]; The expression is rewritten by the frontend with an N_Raise_CE node, which leads to an assertion error at the freezing point of the object declaration. gcc/ada/ * freeze.adb (Freeze_Entity): Protect the call to Declaration_Node against entities of expressions replaced by the frontend with an N_Raise_CE node. --- diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index ca0ffe39c25..381468aa687 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -6582,9 +6582,13 @@ package body Freeze is end if; end if; - -- Special processing for objects created by object declaration + -- Special processing for objects created by object declaration; + -- we protect the call to Declaration_Node against entities of + -- expressions replaced by the frontend with an N_Raise_CE node. - if Nkind (Declaration_Node (E)) = N_Object_Declaration then + if Ekind (E) in E_Constant | E_Variable + and then Nkind (Declaration_Node (E)) = N_Object_Declaration + then Freeze_Object_Declaration (E); end if;