diff options
author | Tristan Gingold <tgingold@free.fr> | 2022-06-04 09:14:37 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2022-06-04 16:27:50 +0200 |
commit | 92900fa26ec56e6e71ff2f9289f0a1f43a94764f (patch) | |
tree | 1698f0ae57c1688b7b3d58f05a11e13a73e13356 /src/vhdl | |
parent | 3b4ef2e843e7bead1f05a2045627583916807374 (diff) | |
download | ghdl-92900fa26ec56e6e71ff2f9289f0a1f43a94764f.tar.gz ghdl-92900fa26ec56e6e71ff2f9289f0a1f43a94764f.tar.bz2 ghdl-92900fa26ec56e6e71ff2f9289f0a1f43a94764f.zip |
vhdl-sem_types: avoid a crash on empty records if forced analysis
Diffstat (limited to 'src/vhdl')
-rw-r--r-- | src/vhdl/vhdl-sem_types.adb | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/vhdl/vhdl-sem_types.adb b/src/vhdl/vhdl-sem_types.adb index 2c0d54636..6a37771b1 100644 --- a/src/vhdl/vhdl-sem_types.adb +++ b/src/vhdl/vhdl-sem_types.adb @@ -871,6 +871,7 @@ package body Vhdl.Sem_Types is Last_Type : Iir; El_List : constant Iir_Flist := Get_Elements_Declaration_List (Def); + Last : Integer; El : Iir; El_Type : Iir; Resolved_Flag : Boolean; @@ -889,7 +890,14 @@ package body Vhdl.Sem_Types is Composite_Found := False; Set_Signal_Type_Flag (Def, True); - for I in Flist_First .. Flist_Last (El_List) loop + if El_List = Null_Iir_Flist then + -- Avoid a crash is no elements. + Last := Flist_First - 1; + else + Last := Flist_Last (El_List); + end if; + + for I in Flist_First .. Last loop El := Get_Nth_Element (El_List, I); El_Type := Get_Subtype_Indication (El); if El_Type /= Null_Iir then |