From c1abb4b76f1508bd8eaa9fc4d679be1ea32fabb2 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Wed, 10 Jan 2024 22:20:05 +0000 Subject: [PATCH] Consider aggregate choice expressions when building sensitivity lists Issue #825 --- src/common.c | 15 +++++++++++++-- test/regress/issue825.vhd | 27 +++++++++++++++++++++++++++ test/regress/testlist.txt | 1 + 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 test/regress/issue825.vhd diff --git a/src/common.c b/src/common.c index 45cdd279..d2c5f634 100644 --- a/src/common.c +++ b/src/common.c @@ -2096,8 +2096,19 @@ void build_wait(tree_t expr, build_wait_fn_t fn, void *ctx) case T_AGGREGATE: { const int nassocs = tree_assocs(expr); - for (int i = 0; i < nassocs; i++) - build_wait(tree_value(tree_assoc(expr, i)), fn, ctx); + for (int i = 0; i < nassocs; i++) { + tree_t a = tree_assoc(expr, i); + build_wait(tree_value(a), fn, ctx); + + switch (tree_subkind(a)) { + case A_RANGE: + build_wait(tree_range(a, 0), fn, ctx); + break; + case A_NAMED: + build_wait(tree_name(a), fn, ctx); + break; + } + } } break; diff --git a/test/regress/issue825.vhd b/test/regress/issue825.vhd new file mode 100644 index 00000000..94a2934a --- /dev/null +++ b/test/regress/issue825.vhd @@ -0,0 +1,27 @@ +entity issue825 is +end entity; + +architecture test of issue825 is + signal s : bit_vector(1 to 3); + signal i : integer range 1 to 3; +begin + + p1: s <= (1 to i => '1') & (i + 1 to 3 => '0'); + + p2: process is + begin + assert s = "000"; + wait for 0 ns; + assert s = "100"; + i <= 2; + wait for 0 ns; + wait for 0 ns; + assert s = "110"; + i <= 3; + wait for 0 ns; + wait for 0 ns; + assert s = "111"; + wait; + end process; + +end architecture; diff --git a/test/regress/testlist.txt b/test/regress/testlist.txt index b48b9af1..f7326e3a 100644 --- a/test/regress/testlist.txt +++ b/test/regress/testlist.txt @@ -918,3 +918,4 @@ gentype7 normal,2019 issue819 normal,2008 issue820 normal issue824 normal +issue825 normal -- 2.39.2