From 0ea529086e7c36cd12bf8ff5a6187c9d8b2796a8 Mon Sep 17 00:00:00 2001 From: Bob Duff Date: Fri, 23 Oct 2020 17:27:34 -0400 Subject: [PATCH] [Ada] Memory leak in concatenation with Initialize_Scalars gcc/ada/ * exp_ch4.adb (Expand_Concatenate): Call Set_No_Initialization on the N_Allocator node that is supposed to allocate on the secondary stack. --- gcc/ada/exp_ch4.adb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index 6899e620763..e0a62be1c48 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -3505,8 +3505,17 @@ package body Exp_Ch4 is Alloc := Make_Allocator (Loc, Expression => New_Occurrence_Of (ConstrT, Loc)); + + -- Allocate on the secondary stack. This is currently done + -- only for type String, which normally doesn't have default + -- initialization, but we need to Set_No_Initialization in case + -- of Initialize_Scalars or Normalize_Scalars; otherwise, the + -- allocator will get transformed and will not use the secondary + -- stack. + Set_Storage_Pool (Alloc, RTE (RE_SS_Pool)); Set_Procedure_To_Call (Alloc, RTE (RE_SS_Allocate)); + Set_No_Initialization (Alloc); Temp := Make_Temporary (Loc, 'R', Alloc); Insert_Action (Cnode, -- 2.30.2