aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2023-10-10 11:13:59 +0200
committerMarc Poulhiès <poulhies@adacore.com>2023-11-07 10:15:00 +0100
commit5a2d82e04d394945087a1a3cdcaf2ed68be8a61b (patch)
treedfcee53b6e9231d88df8b6d1e0666bce63105627 /gcc
parentab7ccb91e592035261e1cac34d9815b6d58ca1bb (diff)
downloadgcc-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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/exp_pakd.adb6
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