From: Javier Miranda Date: Sun, 26 Mar 2023 11:45:50 +0000 (+0000) Subject: ada: Crash on function returning allocated object containing tasks X-Git-Tag: basepoints/gcc-15~8849 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3e62561d5ffbb07fa97a4dddfd729fceb7cfce75;p=thirdparty%2Fgcc.git ada: Crash on function returning allocated object containing tasks The frontend crashes when a function returns an object of a limited type that may have task components, has discriminants, and the object is created with an allocator. gcc/ada/ * exp_ch4.adb (Expand_N_Allocator): If an allocator with constraints is called in the return statement of a function returning a general access type, then propagate to the itype the master of the general access type (since it is the master associated with the returned object). --- diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index f894da58888f..5c9c6686c01f 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -4991,6 +4991,25 @@ package body Exp_Ch4 is Expand_N_Full_Type_Declaration (Parent (Base_Type (PtrT))); + -- When the allocator has a subtype indication then a + -- constraint is present and an itype has been added by + -- Analyze_Allocator as the subtype of this allocator. + + -- If an allocator with constraints is called in the + -- return statement of a function returning a general + -- access type, then propagate to the itype the master + -- of the general access type (since it is the master + -- associated with the returned object). + + elsif Is_Itype (PtrT) + and then Ekind (Current_Scope) = E_Function + and then Ekind (Etype (Current_Scope)) + = E_General_Access_Type + and then In_Return_Value (N) + then + Set_Master_Id (PtrT, + Master_Id (Etype (Current_Scope))); + -- The only other possibility is an itype. For this -- case, the master must exist in the context. This is -- the case when the allocator initializes an access