From 60dcb7772b2af623961a96f0bfde4cf3df2c2a1b Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Mon, 8 Jan 2024 21:29:46 +0000 Subject: [PATCH] Further restrictions on collapsing output ports. Issue #824 --- src/lower.c | 17 +++++++++++++++++ test/regress/issue824.vhd | 37 +++++++++++++++++++++++++++++++++++++ test/regress/testlist.txt | 1 + 3 files changed, 55 insertions(+) create mode 100644 test/regress/issue824.vhd diff --git a/src/lower.c b/src/lower.c index 37399953..9ef03ac5 100644 --- a/src/lower.c +++ b/src/lower.c @@ -11794,6 +11794,23 @@ static void lower_direct_mapped_port(lower_unit_t *lu, driver_set_t *ds, if (type_is_unconstrained(port_type)) return; // Not supported for now + else if (tree_subkind(port) == PORT_OUT) { + tree_t ref = name_to_ref(value); + assert(ref != NULL); + + tree_t signal = tree_ref(ref); + + // Ensure that the default value of the port is the same as the + // signal it is connected to + + tree_t def1 = tree_has_value(signal) ? tree_value(signal) : NULL; + tree_t def2 = tree_has_value(port) ? tree_value(port) : NULL; + + if (def1 != NULL && def2 != NULL && !same_tree(def1, def2)) + return; + else if ((def1 != NULL) ^ (def2 != NULL)) + return; + } int hops = 0; vcode_var_t var = VCODE_INVALID_VAR; diff --git a/test/regress/issue824.vhd b/test/regress/issue824.vhd new file mode 100644 index 00000000..60425149 --- /dev/null +++ b/test/regress/issue824.vhd @@ -0,0 +1,37 @@ +entity issue824 is +end entity; + +library ieee; +use ieee.std_logic_1164.all; + +architecture test of issue824 is + type t_rec is record + x, y : std_logic; + end record; + + procedure update (signal r : inout t_rec) is + begin + r.y <= '1'; + end procedure; + + signal s : t_rec := ('Z', 'Z'); +begin + + p1: process is + begin + --s.x <= 'Z'; + wait for 1 ns; + update(s); + wait for 1 ns; + assert s.x = 'Z'; + wait; + end process; + + b1: block is + port ( o : out t_rec ); + port map ( s ); + begin + o <= ('Z', 'Z'); + end block; + +end architecture; diff --git a/test/regress/testlist.txt b/test/regress/testlist.txt index 5e0b8d8d..b48b9af1 100644 --- a/test/regress/testlist.txt +++ b/test/regress/testlist.txt @@ -917,3 +917,4 @@ issue816 fail,gold gentype7 normal,2019 issue819 normal,2008 issue820 normal +issue824 normal -- 2.39.2