aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2020-01-24 05:44:49 +0100
committerTristan Gingold <tgingold@free.fr>2020-01-24 05:44:49 +0100
commit383aa041762b77aea45c12d10c8d4178597b0fb8 (patch)
tree5509c28eda6bbe87e9763378aabfe010bf400d0f /testsuite
parent92819a2603f20025b055cb57af997bbdef60c92c (diff)
downloadghdl-383aa041762b77aea45c12d10c8d4178597b0fb8.tar.gz
ghdl-383aa041762b77aea45c12d10c8d4178597b0fb8.tar.bz2
ghdl-383aa041762b77aea45c12d10c8d4178597b0fb8.zip
testsuite/synth: add a test for #1109
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/synth/issue1109/ent-orig.vhdl130
-rw-r--r--testsuite/synth/issue1109/ent.vhdl130
-rwxr-xr-xtestsuite/synth/issue1109/testsuite.sh10
3 files changed, 270 insertions, 0 deletions
diff --git a/testsuite/synth/issue1109/ent-orig.vhdl b/testsuite/synth/issue1109/ent-orig.vhdl
new file mode 100644
index 000000000..d8e64e133
--- /dev/null
+++ b/testsuite/synth/issue1109/ent-orig.vhdl
@@ -0,0 +1,130 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity ent is
+ generic (
+ INT : integer := -42;
+ NAT : natural := 21
+ );
+ port (
+ slv_a : in std_logic_vector(7 downto 0);
+ slv_b : in std_logic_vector(7 downto 0);
+
+ slv_eq : out std_logic;
+ slv_ne : out std_logic;
+
+ sl_a : out std_logic;
+ sl_b : out std_logic;
+
+ sl_lt : out std_logic;
+ sl_le : out std_logic;
+ sl_eq : out std_logic;
+ sl_ne : out std_logic;
+ sl_ge : out std_logic;
+ sl_gt : out std_logic;
+
+ uns_a : in unsigned(7 downto 0);
+ uns_b : in unsigned(7 downto 0);
+
+ uns_lt : out std_logic;
+ uns_le : out std_logic;
+ uns_eq : out std_logic;
+ uns_ne : out std_logic;
+ uns_ge : out std_logic;
+ uns_gt : out std_logic;
+
+ uns_int_lt : out std_logic;
+ uns_int_le : out std_logic;
+ uns_int_eq : out std_logic;
+ uns_int_ne : out std_logic;
+ uns_int_ge : out std_logic;
+ uns_int_gt : out std_logic;
+
+ int_uns_lt : out std_logic;
+ int_uns_le : out std_logic;
+ int_uns_eq : out std_logic;
+ int_uns_ne : out std_logic;
+ int_uns_ge : out std_logic;
+ int_uns_gt : out std_logic;
+
+ sgn_a : in signed(7 downto 0);
+ sgn_b : in signed(7 downto 0);
+
+ sgn_lt : out std_logic;
+ sgn_le : out std_logic;
+ sgn_eq : out std_logic;
+ sgn_ne : out std_logic;
+ sgn_ge : out std_logic;
+ sgn_gt : out std_logic;
+
+ sgn_nat_lt : out std_logic;
+ sgn_nat_le : out std_logic;
+ sgn_nat_eq : out std_logic;
+ sgn_nat_ne : out std_logic;
+ sgn_nat_ge : out std_logic;
+ sgn_nat_gt : out std_logic;
+
+ nat_sgn_lt : out std_logic;
+ nat_sgn_le : out std_logic;
+ nat_sgn_eq : out std_logic;
+ nat_sgn_ne : out std_logic;
+ nat_sgn_ge : out std_logic;
+ nat_sgn_gt : out std_logic
+ );
+end;
+
+architecture a of ent is
+begin
+ slv_eq <= slv_a ?= slv_b;
+ slv_ne <= slv_a ?/= slv_b;
+
+ sl_lt <= sl_a ?< sl_b;
+ sl_le <= sl_a ?<= sl_b;
+ sl_eq <= sl_a ?= sl_b;
+ sl_ne <= sl_a ?/= sl_b;
+ sl_ge <= sl_a ?>= sl_b;
+ sl_gt <= sl_a ?> sl_b;
+
+ uns_lt <= uns_a ?< uns_b;
+ uns_le <= uns_a ?<= uns_b;
+ uns_eq <= uns_a ?= uns_b;
+ uns_ne <= uns_a ?/= uns_b;
+ uns_ge <= uns_a ?>= uns_b;
+ uns_gt <= uns_a ?> uns_b;
+
+ uns_int_lt <= uns_a ?< INT;
+ uns_int_le <= uns_a ?<= INT;
+ uns_int_eq <= uns_a ?= INT;
+ uns_int_ne <= uns_a ?/= INT;
+ uns_int_ge <= uns_a ?>= INT;
+ uns_int_gt <= uns_a ?> INT;
+
+ int_uns_lt <= INT ?< uns_b;
+ int_uns_le <= INT ?<= uns_b;
+ int_uns_eq <= INT ?= uns_b;
+ int_uns_ne <= INT ?/= uns_b;
+ int_uns_ge <= INT ?>= uns_b;
+ int_uns_gt <= INT ?> uns_b;
+
+ sgn_lt <= sgn_a ?< sgn_b;
+ sgn_le <= sgn_a ?<= sgn_b;
+ sgn_eq <= sgn_a ?= sgn_b;
+ sgn_ne <= sgn_a ?/= sgn_b;
+ sgn_ge <= sgn_a ?>= sgn_b;
+ sgn_gt <= sgn_a ?> sgn_b;
+
+ sgn_nat_lt <= sgn_a ?< NAT;
+ sgn_nat_le <= sgn_a ?<= NAT;
+ sgn_nat_eq <= sgn_a ?= NAT;
+ sgn_nat_ne <= sgn_a ?/= NAT;
+ sgn_nat_ge <= sgn_a ?>= NAT;
+ sgn_nat_gt <= sgn_a ?> NAT;
+
+ nat_sgn_lt <= NAT ?< sgn_b;
+ nat_sgn_le <= NAT ?<= sgn_b;
+ nat_sgn_eq <= NAT ?= sgn_b;
+ nat_sgn_ne <= NAT ?/= sgn_b;
+ nat_sgn_ge <= NAT ?>= sgn_b;
+ nat_sgn_gt <= NAT ?> sgn_b;
+end;
diff --git a/testsuite/synth/issue1109/ent.vhdl b/testsuite/synth/issue1109/ent.vhdl
new file mode 100644
index 000000000..e4f8ef216
--- /dev/null
+++ b/testsuite/synth/issue1109/ent.vhdl
@@ -0,0 +1,130 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity ent is
+ generic (
+ INT : integer := -42;
+ NAT : natural := 21
+ );
+ port (
+ slv_a : in std_logic_vector(7 downto 0);
+ slv_b : in std_logic_vector(7 downto 0);
+
+ slv_eq : out std_logic;
+ slv_ne : out std_logic;
+
+ sl_a : in std_logic;
+ sl_b : in std_logic;
+
+ sl_lt : out std_logic;
+ sl_le : out std_logic;
+ sl_eq : out std_logic;
+ sl_ne : out std_logic;
+ sl_ge : out std_logic;
+ sl_gt : out std_logic;
+
+ uns_a : in unsigned(7 downto 0);
+ uns_b : in unsigned(7 downto 0);
+
+ uns_lt : out std_logic;
+ uns_le : out std_logic;
+ uns_eq : out std_logic;
+ uns_ne : out std_logic;
+ uns_ge : out std_logic;
+ uns_gt : out std_logic;
+
+ uns_int_lt : out std_logic;
+ uns_int_le : out std_logic;
+ uns_int_eq : out std_logic;
+ uns_int_ne : out std_logic;
+ uns_int_ge : out std_logic;
+ uns_int_gt : out std_logic;
+
+ int_uns_lt : out std_logic;
+ int_uns_le : out std_logic;
+ int_uns_eq : out std_logic;
+ int_uns_ne : out std_logic;
+ int_uns_ge : out std_logic;
+ int_uns_gt : out std_logic;
+
+ sgn_a : in signed(7 downto 0);
+ sgn_b : in signed(7 downto 0);
+
+ sgn_lt : out std_logic;
+ sgn_le : out std_logic;
+ sgn_eq : out std_logic;
+ sgn_ne : out std_logic;
+ sgn_ge : out std_logic;
+ sgn_gt : out std_logic;
+
+ sgn_nat_lt : out std_logic;
+ sgn_nat_le : out std_logic;
+ sgn_nat_eq : out std_logic;
+ sgn_nat_ne : out std_logic;
+ sgn_nat_ge : out std_logic;
+ sgn_nat_gt : out std_logic;
+
+ nat_sgn_lt : out std_logic;
+ nat_sgn_le : out std_logic;
+ nat_sgn_eq : out std_logic;
+ nat_sgn_ne : out std_logic;
+ nat_sgn_ge : out std_logic;
+ nat_sgn_gt : out std_logic
+ );
+end;
+
+architecture a of ent is
+begin
+ slv_eq <= slv_a ?= slv_b;
+ slv_ne <= slv_a ?/= slv_b;
+
+ sl_lt <= sl_a ?< sl_b;
+ sl_le <= sl_a ?<= sl_b;
+ sl_eq <= sl_a ?= sl_b;
+ sl_ne <= sl_a ?/= sl_b;
+ sl_ge <= sl_a ?>= sl_b;
+ sl_gt <= sl_a ?> sl_b;
+
+ uns_lt <= uns_a ?< uns_b;
+ uns_le <= uns_a ?<= uns_b;
+ uns_eq <= uns_a ?= uns_b;
+ uns_ne <= uns_a ?/= uns_b;
+ uns_ge <= uns_a ?>= uns_b;
+ uns_gt <= uns_a ?> uns_b;
+
+ uns_int_lt <= uns_a ?< NAT;
+ uns_int_le <= uns_a ?<= NAT;
+ uns_int_eq <= uns_a ?= NAT;
+ uns_int_ne <= uns_a ?/= NAT;
+ uns_int_ge <= uns_a ?>= NAT;
+ uns_int_gt <= uns_a ?> NAT;
+
+ int_uns_lt <= NAT ?< uns_b;
+ int_uns_le <= NAT ?<= uns_b;
+ int_uns_eq <= NAT ?= uns_b;
+ int_uns_ne <= NAT ?/= uns_b;
+ int_uns_ge <= NAT ?>= uns_b;
+ int_uns_gt <= NAT ?> uns_b;
+
+ sgn_lt <= sgn_a ?< sgn_b;
+ sgn_le <= sgn_a ?<= sgn_b;
+ sgn_eq <= sgn_a ?= sgn_b;
+ sgn_ne <= sgn_a ?/= sgn_b;
+ sgn_ge <= sgn_a ?>= sgn_b;
+ sgn_gt <= sgn_a ?> sgn_b;
+
+ sgn_nat_lt <= sgn_a ?< INT;
+ sgn_nat_le <= sgn_a ?<= INT;
+ sgn_nat_eq <= sgn_a ?= INT;
+ sgn_nat_ne <= sgn_a ?/= INT;
+ sgn_nat_ge <= sgn_a ?>= INT;
+ sgn_nat_gt <= sgn_a ?> INT;
+
+ nat_sgn_lt <= INT ?< sgn_b;
+ nat_sgn_le <= INT ?<= sgn_b;
+ nat_sgn_eq <= INT ?= sgn_b;
+ nat_sgn_ne <= INT ?/= sgn_b;
+ nat_sgn_ge <= INT ?>= sgn_b;
+ nat_sgn_gt <= INT ?> sgn_b;
+end;
diff --git a/testsuite/synth/issue1109/testsuite.sh b/testsuite/synth/issue1109/testsuite.sh
new file mode 100755
index 000000000..7a5fb5397
--- /dev/null
+++ b/testsuite/synth/issue1109/testsuite.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+. ../../testenv.sh
+
+GHDL_STD_FLAGS=--std=08
+synth ent.vhdl -e > syn_ent.vhdl
+analyze syn_ent.vhdl
+clean
+
+echo "Test successful"