From 296c150312dcaedecb119b04d51273d65264aad2 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Fri, 19 Jan 2024 19:49:10 +0000 Subject: [PATCH] Fix crash dumping subtype that cannot be represented in FST Issue #840 --- src/rt/wave.c | 6 +++++- test/regress/gold/issue840.dump | 2 ++ test/regress/issue840.vhd | 23 +++++++++++++++++++++++ test/regress/testlist.txt | 1 + 4 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 test/regress/gold/issue840.dump create mode 100644 test/regress/issue840.vhd diff --git a/src/rt/wave.c b/src/rt/wave.c index b6c99f25..3fc80820 100644 --- a/src/rt/wave.c +++ b/src/rt/wave.c @@ -270,7 +270,11 @@ static fst_type_t *fst_type_for(type_t type, const loc_t *loc) switch (type_kind(type)) { case T_SUBTYPE: { - *ft = *fst_type_for(type_base(type), loc); + fst_type_t *baseft = fst_type_for(type_base(type), loc); + if (baseft == NULL) + goto poison; + + *ft = *baseft; switch (is_well_known(type_ident(type))) { case W_STD_NATURAL: ft->sdt = FST_SDT_VHDL_NATURAL; break; diff --git a/test/regress/gold/issue840.dump b/test/regress/gold/issue840.dump new file mode 100644 index 00000000..b3dffa29 --- /dev/null +++ b/test/regress/gold/issue840.dump @@ -0,0 +1,2 @@ +#0 issue840.t 00000000000000000000000000000001 +#1000000 issue840.t 00000000000000000000000000000010 diff --git a/test/regress/issue840.vhd b/test/regress/issue840.vhd new file mode 100644 index 00000000..4dcfc245 --- /dev/null +++ b/test/regress/issue840.vhd @@ -0,0 +1,23 @@ +entity issue840 is +end entity; + +architecture test of issue840 is + type t_array2d is array (natural range <>, natural range <>) of bit; + subtype t_sub is t_array2d(1 to 3, 1 to 3); + + signal s : t_sub; + signal t : integer; +begin + + process is + begin + s <= ("101", "110", "111"); + t <= 1; + wait for 1 ns; + s <= ("110", "000", "101"); + t <= 2; + wait for 1 ns; + wait; + end process; + +end architecture; diff --git a/test/regress/testlist.txt b/test/regress/testlist.txt index dc2744d4..ff221af3 100644 --- a/test/regress/testlist.txt +++ b/test/regress/testlist.txt @@ -925,3 +925,4 @@ cover22 shell issue831 normal,2008 issue829 normal issue839 normal +issue840 wave -- 2.39.2