From 6f8aaa4965aafdfdecbb24a3e2b65cd0e6f34f07 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Mon, 25 Jul 2022 05:13:30 +0200 Subject: synth-environment: fix memory crash. Fix #2139 --- src/synth/synth-environment.adb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/synth/synth-environment.adb b/src/synth/synth-environment.adb index 8433060e3..88d84df61 100644 --- a/src/synth/synth-environment.adb +++ b/src/synth/synth-environment.adb @@ -1805,8 +1805,6 @@ package body Synth.Environment is procedure Insert_Partial_Assign (Ctxt : Builders.Context_Acc; Seq : Seq_Assign; Asgn : Partial_Assign) is - V : Partial_Assign_Record renames Partial_Assign_Table.Table (Asgn); - V_Next : constant Uns32 := V.Offset + Get_Width (V.Value); Seq_Asgn : Seq_Assign_Record renames Assign_Table.Table (Seq); El, Last_El : Partial_Assign; Inserted : Boolean; @@ -1815,7 +1813,15 @@ package body Synth.Environment is Last_El := No_Partial_Assign; El := Seq_Asgn.Val.Asgns; while El /= No_Partial_Assign loop + + -- A new element may be appends to the partial_assign_table. + -- Allow it to grow without allocating memory. + Partial_Assign_Table.Reserve (1); + declare + V : Partial_Assign_Record renames + Partial_Assign_Table.Table (Asgn); + V_Next : constant Uns32 := V.Offset + Get_Width (V.Value); P : Partial_Assign_Record renames Partial_Assign_Table.Table (El); P_Next : constant Uns32 := P.Offset + Get_Width (P.Value); begin -- cgit v1.2.3