From: Bob Duff Date: Fri, 15 Dec 2023 21:59:43 +0000 (-0500) Subject: ada: Fix memory leak in 'Image X-Git-Tag: basepoints/gcc-16~9374 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4629cd34506416d05cd9ab56879f69b44fe65d2b;p=thirdparty%2Fgcc.git ada: Fix memory leak in 'Image Fix memory leak in 'Image by managing the secondary stack in scopes that call the new Ada 2020 'Image, which calls 'Put_Image and then Get, which returns on the secondary stack. gcc/ada/ * exp_put_image.adb (Build_Image_Call): Call Set_Uses_Sec_Stack on the current scope. We don't do this at all call sites, because there are three; better to do it here. --- diff --git a/gcc/ada/exp_put_image.adb b/gcc/ada/exp_put_image.adb index c298163f36f..182497fb6e8 100644 --- a/gcc/ada/exp_put_image.adb +++ b/gcc/ada/exp_put_image.adb @@ -1290,6 +1290,14 @@ package body Exp_Put_Image is Actions := New_List (Sink_Decl, Put_Im, Result_Decl); end if; + -- To avoid leaks, we need to manage the secondary stack, because Get is + -- returning a String allocated thereon. It might be cleaner to let the + -- normal mechanisms for functions returning on the secondary stack call + -- Set_Uses_Sec_Stack, but this expansion of 'Image is happening too + -- late for that. + + Set_Uses_Sec_Stack (Current_Scope); + return Make_Expression_With_Actions (Loc, Actions => Actions, Expression => New_Occurrence_Of (Result_Entity, Loc));