]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Fix wrong finalization of constrained array derived from unconstrained
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 5 May 2025 14:59:13 +0000 (16:59 +0200)
committerEric Botcazou <ebotcazou@adacore.com>
Tue, 1 Jul 2025 14:33:58 +0000 (16:33 +0200)
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.

gcc/ada/exp_util.adb

index 1874420fd273b512c2cff3d45e8ece3abcfff8f4..2510b3f1f9b03c3d471fdafc7af5f10c1a9e576d 100644 (file)
@@ -6072,9 +6072,10 @@ package body Exp_Util is
       --  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));