]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Run-time error with GNAT-LLVM on container aggregate with finalization
authorGary Dismukes <dismukes@adacore.com>
Tue, 30 Jul 2024 23:08:17 +0000 (23:08 +0000)
committerMarc Poulhiès <dkm@gcc.gnu.org>
Thu, 8 Aug 2024 14:28:29 +0000 (16:28 +0200)
When unnesting is enabled, the compiler was failing to copy the At_End_Proc
field from a block statement to the procedure created to replace it when
unnesting of top-level blocks is done.  At run time this could lead to
exceptions due to missing finalization calls.

gcc/ada/

* exp_ch7.adb (Unnest_Block): Copy the At_End_Proc from the block
statement to the newly created subprogram body.

gcc/ada/exp_ch7.adb

index 72f0b539c2ebcee83f0c888a2e5813a58f908671..640ad5c60b8dff85e49e1d8f977bd86ffb9081f1 100644 (file)
@@ -8932,7 +8932,8 @@ package body Exp_Ch7 is
               Defining_Unit_Name => Local_Proc),
               Declarations       => Declarations (Decl),
           Handled_Statement_Sequence =>
-            Handled_Statement_Sequence (Decl));
+            Handled_Statement_Sequence (Decl),
+          At_End_Proc                => New_Copy_Tree (At_End_Proc (Decl)));
 
       --  Handlers in the block may contain nested subprograms that require
       --  unnesting.