diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2024-05-20 14:33:14 +0200 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2024-06-20 10:50:55 +0200 |
commit | 9cf95147c04c64344466f6e41ce5be32fbde96e0 (patch) | |
tree | ff445c6b70c453878df5dca612d1ed797368b7b5 /gcc/ada/freeze.adb | |
parent | ce59982c28e19b2c478e12e4afc7b03e8793498b (diff) | |
download | gcc-9cf95147c04c64344466f6e41ce5be32fbde96e0.zip gcc-9cf95147c04c64344466f6e41ce5be32fbde96e0.tar.gz gcc-9cf95147c04c64344466f6e41ce5be32fbde96e0.tar.bz2 |
ada: Fix crash on real literal in declare expression of expression function
The problem is that the freeze node of the type to which the real literal
is resolved is placed inside the expression function instead of outside.
gcc/ada/
* freeze.adb (Freeze_Expression): Also attach pending freeze nodes
to the parent in the case of an internal block in a spec expression.
Diffstat (limited to 'gcc/ada/freeze.adb')
-rw-r--r-- | gcc/ada/freeze.adb | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb index 3c3d038..1867880 100644 --- a/gcc/ada/freeze.adb +++ b/gcc/ada/freeze.adb @@ -8872,7 +8872,8 @@ package body Freeze is end if; -- The current scope may be that of a constrained component of - -- an enclosing record declaration, or of a loop of an enclosing + -- an enclosing record declaration, or a block of an enclosing + -- declare expression in Ada 2022, or of a loop of an enclosing -- quantified expression or aggregate with an iterated component -- in Ada 2022, which is above the current scope in the scope -- stack. Indeed in the context of a quantified expression or @@ -8884,7 +8885,7 @@ package body Freeze is if not Is_Compilation_Unit (Current_Scope) and then (Is_Record_Type (Scope (Current_Scope)) - or else (Ekind (Current_Scope) = E_Loop + or else (Ekind (Current_Scope) in E_Block | E_Loop and then Is_Internal (Current_Scope))) then Pos := Pos - 1; |