]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Fix for compiler crash on function return with Relaxed_Finalization parts
authorGary Dismukes <dismukes@adacore.com>
Tue, 20 May 2025 00:16:25 +0000 (00:16 +0000)
committerEric Botcazou <ebotcazou@adacore.com>
Tue, 1 Jul 2025 14:33:59 +0000 (16:33 +0200)
The compiler crashes on compiling a return statement of a function whose result
type has a component whose type is specified with Relaxed_Finalization. The
compiler was attempting to retrieve a nonexistent BIP_Collection extra formal
from the enclosing function, which may not exist in the case of result types
with Relaxed_Finalization.

gcc/ada/ChangeLog:

* exp_ch3.adb (Build_Heap_Or_Pool_Allocator): Test not Has_Relaxed_Finalization
as a guard against retrieving BIP_Collection formal (and related code).

gcc/ada/exp_ch3.adb

index fa87149aec05bfd7ffb7902c782970758bd82007..24bd34b04d5cd9314e694a7e9f039dc5343a5d88 100644 (file)
@@ -6888,7 +6888,9 @@ package body Exp_Ch3 is
 
          --  Processing for objects that require finalization actions
 
-         if Needs_Finalization (Ret_Typ) then
+         if Needs_Finalization (Ret_Typ)
+           and then not Has_Relaxed_Finalization (Ret_Typ)
+         then
             declare
                Decls       : constant List_Id := New_List;
                Fin_Coll_Id : constant Entity_Id :=