diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2024-10-10 13:06:12 +0200 |
---|---|---|
committer | Marc Poulhiès <dkm@gcc.gnu.org> | 2024-11-04 16:57:56 +0100 |
commit | f6afd361c53c319f5151ddd6c0700eea8b0125c9 (patch) | |
tree | dfadca93293e85ce59d492ea1b9f25c0ff8a6b0a /gcc/ada | |
parent | a0b57f6ff5c8eff7e8c17a28ccbed7b11ddc82e7 (diff) | |
download | gcc-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.adb | 6 |
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 |