aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2024-10-10 13:06:12 +0200
committerMarc Poulhiès <dkm@gcc.gnu.org>2024-11-04 16:57:56 +0100
commitf6afd361c53c319f5151ddd6c0700eea8b0125c9 (patch)
treedfadca93293e85ce59d492ea1b9f25c0ff8a6b0a /gcc/ada
parenta0b57f6ff5c8eff7e8c17a28ccbed7b11ddc82e7 (diff)
downloadgcc-f6afd361c53c319f5151ddd6c0700eea8b0125c9.zip
gcc-f6afd361c53c319f5151ddd6c0700eea8b0125c9.tar.gz
gcc-f6afd361c53c319f5151ddd6c0700eea8b0125c9.tar.bz2
ada: Fix internal error on alignment clause for type declared in generic unit
The front-end raises Program_Error on an alignment clause for a type in a generic unit that references the alignment of another type in the unit. gcc/ada/ChangeLog: PR ada/117051 * freeze.adb (Freeze_Entity): Call the layout procedure on subtypes declared in a generic unit when they are static.
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/freeze.adb6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb
index c7e3be0..9a86217 100644
--- a/gcc/ada/freeze.adb
+++ b/gcc/ada/freeze.adb
@@ -8022,9 +8022,11 @@ package body Freeze is
-- generation, and so the size and alignment values for such types
-- are irrelevant. Ditto for types declared within a generic unit,
-- which may have components that depend on generic parameters, and
- -- that will be recreated in an instance.
+ -- that will be recreated in an instance, except for static subtypes
+ -- because they may be referenced in the static expressions of the
+ -- generic unit, which need to be evaluated during its processing.
- if Inside_A_Generic then
+ if Inside_A_Generic and then not Is_Static_Subtype (E) then
null;
-- Otherwise we call the layout procedure