From c8d9a1640e7c8c6e46c8cf9fc90f6bd55c8d92f4 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Sat, 17 Feb 2024 10:28:46 +0000 Subject: [PATCH] Fix code generation error with TO_UNSIGNED in case choice --- src/lower.c | 2 +- test/regress/issue844.vhd | 28 ++++++++++++++++++++++++++++ test/regress/testlist.txt | 1 + 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 test/regress/issue844.vhd diff --git a/src/lower.c b/src/lower.c index 15400e8f..0e747e1a 100644 --- a/src/lower.c +++ b/src/lower.c @@ -7216,7 +7216,7 @@ static void lower_case_array(lower_unit_t *lu, tree_t stmt, loop_stack_t *loops) vcode_reg_t name_reg = lower_rvalue(lu, name); if (vcode_reg_kind(name_reg) != VCODE_TYPE_UARRAY) - name_reg = lower_wrap(lu, type, name_reg); + name_reg = lower_wrap(lu, tree_type(name), name_reg); vcode_reg_t context_reg = lower_context_for_call(lu, cmp_func); vcode_reg_t args[] = { context_reg, name_reg, val_reg }; diff --git a/test/regress/issue844.vhd b/test/regress/issue844.vhd new file mode 100644 index 00000000..656bdcef --- /dev/null +++ b/test/regress/issue844.vhd @@ -0,0 +1,28 @@ +entity issue844 is +end entity; + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +architecture test of issue844 is + signal s : std_logic_vector(127 downto 0); + signal o : std_logic; +begin + + ogen: with unsigned(s) select o <= + '1' when to_unsigned(42, 128), + '0' when others; + + check: process is + begin + assert o = 'U'; + wait for 0 ns; + assert o = '0'; + s <= 128D"42"; + wait for 1 ns; + assert o = '1'; + wait; + end process; + +end architecture; diff --git a/test/regress/testlist.txt b/test/regress/testlist.txt index 58b14291..7f09e495 100644 --- a/test/regress/testlist.txt +++ b/test/regress/testlist.txt @@ -939,3 +939,4 @@ wave10 wave driver20 normal driver21 fail,gold ename7 normal,2008 +issue844 normal,2008 -- 2.39.2