diff options
author | Tristan Gingold <tgingold@free.fr> | 2022-07-25 05:13:30 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2022-07-25 05:13:30 +0200 |
commit | 6f8aaa4965aafdfdecbb24a3e2b65cd0e6f34f07 (patch) | |
tree | 63d277d0413bde70c9232a8014243e8443cc4b39 /src/synth | |
parent | 4030d67a73d4b5254912c586b6638ca3851855d6 (diff) | |
download | ghdl-6f8aaa4965aafdfdecbb24a3e2b65cd0e6f34f07.tar.gz ghdl-6f8aaa4965aafdfdecbb24a3e2b65cd0e6f34f07.tar.bz2 ghdl-6f8aaa4965aafdfdecbb24a3e2b65cd0e6f34f07.zip |
synth-environment: fix memory crash. Fix #2139
Diffstat (limited to 'src/synth')
-rw-r--r-- | src/synth/synth-environment.adb | 10 |
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 |