From 373a991d17fd3cab3188ce23d43baae5d474f89c Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Thu, 31 Dec 2020 10:05:28 +0100 Subject: testsuite/gna: add more tests for #1549 --- testsuite/gna/issue1549/ent7.vhdl | 31 +++++++++++++++++++++++++++++++ testsuite/gna/issue1549/ent8.vhdl | 35 +++++++++++++++++++++++++++++++++++ testsuite/gna/issue1549/testsuite.sh | 20 ++++---------------- 3 files changed, 70 insertions(+), 16 deletions(-) create mode 100644 testsuite/gna/issue1549/ent7.vhdl create mode 100644 testsuite/gna/issue1549/ent8.vhdl (limited to 'testsuite') diff --git a/testsuite/gna/issue1549/ent7.vhdl b/testsuite/gna/issue1549/ent7.vhdl new file mode 100644 index 000000000..b855b6b25 --- /dev/null +++ b/testsuite/gna/issue1549/ent7.vhdl @@ -0,0 +1,31 @@ +entity ent7 is + generic ( + WIDTH : natural := 1); +end; + +architecture ent of ent7 is + type data_t is record + t : bit_vector; + end record; + type bv_array_t is array (natural range <>) of data_t; + subtype bv_array2_t is bv_array_t(open)(t(WIDTH - 1 downto 0)); + + procedure write_data (constant c : bv_array2_t) is + begin + for i in c'range loop + report integer'image(i) & " =>" & to_string(c(i).t); + end loop; + + assert c(1).t(0) = '1'; -- <<<<<====== This should not fail + end procedure; + +begin + process + variable data2 : bv_array2_t(0 to 1); + begin + data2(0).t := "0"; + data2(1).t := "1"; + write_data(data2); + wait; + end process; +end ent; diff --git a/testsuite/gna/issue1549/ent8.vhdl b/testsuite/gna/issue1549/ent8.vhdl new file mode 100644 index 000000000..b8b72b83c --- /dev/null +++ b/testsuite/gna/issue1549/ent8.vhdl @@ -0,0 +1,35 @@ +entity ent8 is + generic ( + WIDTH : natural := 1); +end; + +architecture ent of ent8 is + type data_t is record + t1 : bit_vector; + t2 : bit_vector; + end record; + type bv_array_t is array (natural range <>) of data_t; + subtype bv_array1_t is bv_array_t(open)(t1(WIDTH - 1 downto 0)); + subtype bv_array2_t is bv_array1_t(open)(t2(WIDTH - 1 downto 0)); + + procedure write_data (constant c : bv_array2_t) is + begin + for i in c'range loop + report integer'image(i) & " =>" & to_string(c(i).t1); + end loop; + + assert c(1).t1(0) = '1'; -- <<<<<====== This should not fail + end procedure; + +begin + process + variable data2 : bv_array2_t(0 to 1); + begin + data2(0).t1 := "0"; + data2(0).t2 := "1"; + data2(1).t1 := "1"; + data2(1).t2 := "0"; + write_data(data2); + wait; + end process; +end ent; diff --git a/testsuite/gna/issue1549/testsuite.sh b/testsuite/gna/issue1549/testsuite.sh index 28abdf604..77a9ac688 100755 --- a/testsuite/gna/issue1549/testsuite.sh +++ b/testsuite/gna/issue1549/testsuite.sh @@ -3,23 +3,11 @@ . ../../testenv.sh export GHDL_STD_FLAGS=--std=08 -analyze ent.vhdl -elab_simulate ent -analyze ent2.vhdl -elab_simulate ent2 - -analyze ent3.vhdl -elab_simulate ent3 - -analyze ent4.vhdl -elab_simulate ent4 - -analyze ent5.vhdl -elab_simulate ent5 - -analyze ent6.vhdl -elab_simulate ent6 +for f in ent ent2 ent3 ent4 ent5 ent6 ent7 ent8; do + analyze $f.vhdl + elab_simulate $f +done clean -- cgit v1.2.3