The bug had been present for dynamically allocated objects since the first
rewrite of the finalization machinery more than a decade ago, and was then
propagated to statically declared objects by the recent rewrite.
gcc/ada/ChangeLog:
* exp_util.adb (Finalize_Address): Do not go to the root type for
array types.
-- now known to be protected, the finalization routine is the one
-- defined on the corresponding record of the ancestor (corresponding
-- records do not automatically inherit operations, but maybe they
- -- should???)
+ -- should???). This does not apply to array types, where every base
+ -- type has a finalization routine that depends on the first subtype.
- if Is_Untagged_Derivation (Btyp) then
+ if Is_Untagged_Derivation (Btyp) and then not Is_Array_Type (Btyp) then
if Is_Protected_Type (Btyp) then
Utyp := Corresponding_Record_Type (Root_Type (Btyp));