aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/exp_pakd.adb17
1 files changed, 17 insertions, 0 deletions
diff --git a/gcc/ada/exp_pakd.adb b/gcc/ada/exp_pakd.adb
index f841509..d6f47dd 100644
--- a/gcc/ada/exp_pakd.adb
+++ b/gcc/ada/exp_pakd.adb
@@ -685,7 +685,24 @@ package body Exp_Pakd is
-- because the expression will not be further analyzed, and Gigi
-- considers the two types equivalent in any case.
+ -- This is not strictly the case ??? If the reference is an actual
+ -- in a call, the expansion of the prefix is delayed, and must be
+ -- reanalyzed, see Reset_Packed_Prefix. On the other hand, if the
+ -- prefix is a simple array reference, reanalysis can produce spurious
+ -- type errors when the PAT type is replaced again with the original
+ -- type of the array. The following is correct and minimal, but the
+ -- handling of more complex packed expressions in actuals is confused.
+ -- It is likely that the problem only remains for actuals in calls.
+
Set_Etype (Aexp, Packed_Array_Type (Act_ST));
+
+ if Is_Entity_Name (Aexp)
+ or else
+ (Nkind (Aexp) = N_Indexed_Component
+ and then Is_Entity_Name (Prefix (Aexp)))
+ then
+ Set_Analyzed (Aexp);
+ end if;
end Convert_To_PAT_Type;
------------------------------