aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2020-12-31 10:05:28 +0100
committerTristan Gingold <tgingold@free.fr>2020-12-31 10:57:27 +0100
commit373a991d17fd3cab3188ce23d43baae5d474f89c (patch)
tree8eaa59de4871c60ac978694006527462911595d3 /testsuite
parent9d4c4ecb3aa855501cdafb482e0c9974e42ed75a (diff)
downloadghdl-373a991d17fd3cab3188ce23d43baae5d474f89c.tar.gz
ghdl-373a991d17fd3cab3188ce23d43baae5d474f89c.tar.bz2
ghdl-373a991d17fd3cab3188ce23d43baae5d474f89c.zip
testsuite/gna: add more tests for #1549
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/gna/issue1549/ent7.vhdl31
-rw-r--r--testsuite/gna/issue1549/ent8.vhdl35
-rwxr-xr-xtestsuite/gna/issue1549/testsuite.sh20
3 files changed, 70 insertions, 16 deletions
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