From 5a2d82e04d394945087a1a3cdcaf2ed68be8a61b Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 10 Oct 2023 11:13:59 +0200 Subject: [PATCH] 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. --- gcc/ada/exp_pakd.adb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/ada/exp_pakd.adb b/gcc/ada/exp_pakd.adb index c3908a54538..ad12aec1e23 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 -- 2.11.4.GIT