diff options
author | Javier Miranda <miranda@adacore.com> | 2022-03-20 11:36:25 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2022-05-17 08:25:42 +0000 |
commit | 6c72dc7d602f45d086a9651e623a4e68fa96fab6 (patch) | |
tree | 889b7c5db0e0e72d9d4d50b90237bc728ee54734 /gcc/ada | |
parent | c30e5ab027a59a2ffcf7fb2d093ce2b64de712eb (diff) | |
download | gcc-6c72dc7d602f45d086a9651e623a4e68fa96fab6.zip gcc-6c72dc7d602f45d086a9651e623a4e68fa96fab6.tar.gz gcc-6c72dc7d602f45d086a9651e623a4e68fa96fab6.tar.bz2 |
[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.
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/freeze.adb | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index ca0ffe3..381468a 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; |