aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2022-07-27 22:22:16 +0200
committerTristan Gingold <tgingold@free.fr>2022-07-27 22:30:44 +0200
commit3976d0f60b3ab41d91767e30ee972ad8ded426a1 (patch)
tree2012570005cdf888f955953f3f7056a5a1e75b77 /testsuite
parentaf37a8e12d4f06d874c0d4b2a961b7e6b7496c30 (diff)
downloadghdl-3976d0f60b3ab41d91767e30ee972ad8ded426a1.tar.gz
ghdl-3976d0f60b3ab41d91767e30ee972ad8ded426a1.tar.bz2
ghdl-3976d0f60b3ab41d91767e30ee972ad8ded426a1.zip
testsuite/synth: add a test for #2144
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/synth/issue2144/bug.vhdl39
-rw-r--r--testsuite/synth/issue2144/repro.ref18
-rw-r--r--testsuite/synth/issue2144/repro.vhdl52
-rwxr-xr-xtestsuite/synth/issue2144/testsuite.sh11
4 files changed, 120 insertions, 0 deletions
diff --git a/testsuite/synth/issue2144/bug.vhdl b/testsuite/synth/issue2144/bug.vhdl
new file mode 100644
index 000000000..fbb4e3fd9
--- /dev/null
+++ b/testsuite/synth/issue2144/bug.vhdl
@@ -0,0 +1,39 @@
+library IEEE;
+use IEEE.std_logic_1164.all;
+
+entity bug is
+ port (
+ dummy : in std_ulogic
+ );
+end bug;
+
+architecture struct of bug is
+ type table_t is array (natural range<>, natural range<>) of std_ulogic;
+
+ function fun return table_t is
+ variable ret : table_t(0 to 1, 0 to 3);
+ begin
+ return ret;
+ end function;
+
+ constant table : table_t := fun;
+
+begin
+ gen_i : for i in table'range(1) generate
+ gen_j : for j in table'range(2) generate
+ b : block is
+ function print return std_ulogic is
+ begin
+ report "index="& integer'image(i) & "," & integer'image(j) & "; " &
+ "length="& integer'image(table'length(1)) & "," & integer'image(table'length(2));
+ return '0';
+ end function;
+
+ constant tmp : std_ulogic := print;
+ constant entry : std_ulogic := table(i, j);
+ begin
+
+ end block;
+ end generate;
+ end generate;
+end architecture;
diff --git a/testsuite/synth/issue2144/repro.ref b/testsuite/synth/issue2144/repro.ref
new file mode 100644
index 000000000..f552aa83c
--- /dev/null
+++ b/testsuite/synth/issue2144/repro.ref
@@ -0,0 +1,18 @@
+Synthesis of repro.vhdl -e
+/Users/gingold/devel/ghdl/ghdl_mcode:note: top entity is "bug"
+repro.vhdl:26:9:(report note): t(0,0)=100
+repro.vhdl:26:9:(report note): t(0,1)=101
+repro.vhdl:26:9:(report note): t(0,2)=102
+repro.vhdl:26:9:(report note): t(0,3)=103
+repro.vhdl:26:9:(report note): t(1,0)=110
+repro.vhdl:26:9:(report note): t(1,1)=111
+repro.vhdl:26:9:(report note): t(1,2)=112
+repro.vhdl:26:9:(report note): t(1,3)=113
+repro.vhdl:40:41:(report note): index=0,0; length=2,4
+repro.vhdl:40:41:(report note): index=0,1; length=2,4
+repro.vhdl:40:41:(report note): index=0,2; length=2,4
+repro.vhdl:40:41:(report note): index=0,3; length=2,4
+repro.vhdl:40:41:(report note): index=1,0; length=2,4
+repro.vhdl:40:41:(report note): index=1,1; length=2,4
+repro.vhdl:40:41:(report note): index=1,2; length=2,4
+repro.vhdl:40:41:(report note): index=1,3; length=2,4
diff --git a/testsuite/synth/issue2144/repro.vhdl b/testsuite/synth/issue2144/repro.vhdl
new file mode 100644
index 000000000..a89fbcaa5
--- /dev/null
+++ b/testsuite/synth/issue2144/repro.vhdl
@@ -0,0 +1,52 @@
+library IEEE;
+use IEEE.std_logic_1164.all;
+
+entity bug is
+ port (
+ dummy : in std_ulogic
+ );
+end bug;
+
+architecture struct of bug is
+ type table_t is array (natural range<>, natural range<>) of natural;
+
+ function fun return table_t is
+ variable ret : table_t(0 to 1, 0 to 3);
+ begin
+ ret(0,0) := 100;
+ ret(0,1) := 101;
+ ret(0,2) := 102;
+ ret(0,3) := 103;
+ ret(1,0) := 110;
+ ret(1,1) := 111;
+ ret(1,2) := 112;
+ ret(1,3) := 113;
+ for i in ret'range(1) loop
+ for j in ret'range(2) loop
+ report "t("& integer'image(i) & "," & integer'image(j)
+ & ")=" & integer'image(ret(i,j));
+ end loop;
+ end loop;
+ return ret;
+ end function;
+
+ constant table : table_t := fun;
+begin
+ gen_i : for i in table'range(1) generate
+ gen_j : for j in table'range(2) generate
+ b : block is
+ function print return std_ulogic is
+ begin
+ report "index="& integer'image(i) & "," & integer'image(j) & "; " &
+ "length="& integer'image(table'length(1)) & "," & integer'image(table'length(2));
+ return '0';
+ end function;
+
+ constant tmp : std_ulogic := print;
+ constant entry : natural := table(i, j);
+ begin
+
+ end block;
+ end generate;
+ end generate;
+end architecture;
diff --git a/testsuite/synth/issue2144/testsuite.sh b/testsuite/synth/issue2144/testsuite.sh
new file mode 100755
index 000000000..170abfafd
--- /dev/null
+++ b/testsuite/synth/issue2144/testsuite.sh
@@ -0,0 +1,11 @@
+#! /bin/sh
+
+. ../../testenv.sh
+
+synth repro.vhdl -e > syn_repro.vhdl 2> repro.err
+
+diff_nocr repro.ref repro.err
+
+synth_only bug
+
+echo "Test successful"