aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2024-05-20 14:33:14 +0200
committerMarc Poulhiès <poulhies@adacore.com>2024-06-20 10:50:55 +0200
commit9cf95147c04c64344466f6e41ce5be32fbde96e0 (patch)
treeff445c6b70c453878df5dca612d1ed797368b7b5
parentce59982c28e19b2c478e12e4afc7b03e8793498b (diff)
downloadgcc-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.
-rw-r--r--gcc/ada/freeze.adb5
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;