diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2023-10-10 11:13:59 +0200 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2023-11-07 10:15:00 +0100 |
commit | 5a2d82e04d394945087a1a3cdcaf2ed68be8a61b (patch) | |
tree | dfcee53b6e9231d88df8b6d1e0666bce63105627 | |
parent | ab7ccb91e592035261e1cac34d9815b6d58ca1bb (diff) | |
download | gcc-5a2d82e04d394945087a1a3cdcaf2ed68be8a61b.zip gcc-5a2d82e04d394945087a1a3cdcaf2ed68be8a61b.tar.gz gcc-5a2d82e04d394945087a1a3cdcaf2ed68be8a61b.tar.bz2 |
ada: Fix internal error on address of element of packed array component
This occurs when the component is part of a discriminated type and its
offset depends on a discriminant, the problem being that the front-end
generates an incomplete Bit_Position attribute reference.
gcc/ada/
* exp_pakd.adb (Get_Base_And_Bit_Offset): Use the full component
reference instead of just the selector name for 'Bit_Position.
-rw-r--r-- | gcc/ada/exp_pakd.adb | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/ada/exp_pakd.adb b/gcc/ada/exp_pakd.adb index c3908a5..ad12aec 100644 --- a/gcc/ada/exp_pakd.adb +++ b/gcc/ada/exp_pakd.adb @@ -2112,8 +2112,8 @@ package body Exp_Pakd is -- We build up an expression serially that has the form - -- linear-subscript * component_size for each array reference - -- + field'Bit_Position for each record field + -- linear-subscript * component_size for each array component ref + -- + pref.component'Bit_Position for each record component ref -- + ... loop @@ -2135,7 +2135,7 @@ package body Exp_Pakd is elsif Nkind (Base) = N_Selected_Component then Term := Make_Attribute_Reference (Loc, - Prefix => Selector_Name (Base), + Prefix => Base, Attribute_Name => Name_Bit_Position); else |