aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2021-11-21 08:21:24 +0100
committerTristan Gingold <tgingold@free.fr>2021-11-21 08:21:24 +0100
commita76a041d967d05a3b59da7c454a8cbbe2c802989 (patch)
tree0e11ab16fa0fa2107c39b4ba37451a8b29c14471 /testsuite
parent0ce499a09bc3403114d9a1ac8989f29790a64967 (diff)
downloadghdl-a76a041d967d05a3b59da7c454a8cbbe2c802989.tar.gz
ghdl-a76a041d967d05a3b59da7c454a8cbbe2c802989.tar.bz2
ghdl-a76a041d967d05a3b59da7c454a8cbbe2c802989.zip
testsuite/synth: add a test for #1920
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/synth/issue1920/ent1.vhdl30
-rw-r--r--testsuite/synth/issue1920/ent2.vhdl30
-rwxr-xr-xtestsuite/synth/issue1920/testsuite.sh8
3 files changed, 68 insertions, 0 deletions
diff --git a/testsuite/synth/issue1920/ent1.vhdl b/testsuite/synth/issue1920/ent1.vhdl
new file mode 100644
index 000000000..f6e3cf0c9
--- /dev/null
+++ b/testsuite/synth/issue1920/ent1.vhdl
@@ -0,0 +1,30 @@
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity ent is
+ port (
+ inputs : in std_logic;
+ result : out std_logic
+ );
+end entity;
+
+architecture synth of ent is
+
+ function local_func(A : std_logic) return std_logic is
+ begin
+ return A;
+ end function;
+
+ -- With this line
+ -- As expected, GHDL emits a good enough error message: cannot use signal value during elaboration
+ --constant C : std_logic := inputs;
+
+ -- But with this line, which is erroneous code, because a constant cannot be computed from a non-constant
+ -- GHDL crashes with an assertion: raised CONSTRAINT_ERROR : netlists-builders.adb:791 access check failed
+ constant C : std_logic := local_func(inputs);
+
+begin
+
+ result <= C;
+
+end architecture;
diff --git a/testsuite/synth/issue1920/ent2.vhdl b/testsuite/synth/issue1920/ent2.vhdl
new file mode 100644
index 000000000..f524c0469
--- /dev/null
+++ b/testsuite/synth/issue1920/ent2.vhdl
@@ -0,0 +1,30 @@
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity ent is
+ port (
+ inputs : in std_logic;
+ result : out std_logic
+ );
+end entity;
+
+architecture synth of ent is
+
+ function local_func(A : std_logic) return std_logic is
+ begin
+ return A;
+ end function;
+
+ -- With this line
+ -- As expected, GHDL emits a good enough error message: cannot use signal value during elaboration
+ constant C : std_logic := inputs;
+
+ -- But with this line, which is erroneous code, because a constant cannot be computed from a non-constant
+ -- GHDL crashes with an assertion: raised CONSTRAINT_ERROR : netlists-builders.adb:791 access check failed
+ --constant C : std_logic := local_func(inputs);
+
+begin
+
+ result <= C;
+
+end architecture;
diff --git a/testsuite/synth/issue1920/testsuite.sh b/testsuite/synth/issue1920/testsuite.sh
new file mode 100755
index 000000000..81da7c94f
--- /dev/null
+++ b/testsuite/synth/issue1920/testsuite.sh
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+. ../../testenv.sh
+
+synth_failure ent1.vhdl -e
+synth_failure ent2.vhdl -e
+
+echo "Test successful"