aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2022-07-25 05:13:30 +0200
committerTristan Gingold <tgingold@free.fr>2022-07-25 05:13:30 +0200
commit6f8aaa4965aafdfdecbb24a3e2b65cd0e6f34f07 (patch)
tree63d277d0413bde70c9232a8014243e8443cc4b39
parent4030d67a73d4b5254912c586b6638ca3851855d6 (diff)
downloadghdl-6f8aaa4965aafdfdecbb24a3e2b65cd0e6f34f07.tar.gz
ghdl-6f8aaa4965aafdfdecbb24a3e2b65cd0e6f34f07.tar.bz2
ghdl-6f8aaa4965aafdfdecbb24a3e2b65cd0e6f34f07.zip
synth-environment: fix memory crash. Fix #2139
-rw-r--r--src/synth/synth-environment.adb10
1 files 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