From 891dccd2b39a2e49db025061c2b57eee04be540e Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Thu, 14 Jul 2022 19:02:00 +0100 Subject: [PATCH] Update test cases after changes to longest_static_prefix --- src/common.c | 35 +++++++++++------------------------ src/common.h | 3 +-- src/lower.c | 2 +- src/simp.c | 2 +- test/regress/issue112.vhd | 9 ++++++++- test/regress/issue153.vhd | 14 +++++++------- 6 files changed, 29 insertions(+), 36 deletions(-) diff --git a/src/common.c b/src/common.c index 6a460968..5d8c2ce3 100644 --- a/src/common.c +++ b/src/common.c @@ -1556,7 +1556,7 @@ void to_string(text_buf_t *tb, type_t type, int64_t value) } } -static bool is_static(tree_t expr, tree_flags_t flags) +static bool is_static(tree_t expr) { switch (tree_kind(expr)) { case T_REF: @@ -1566,11 +1566,10 @@ static bool is_static(tree_t expr, tree_flags_t flags) case T_CONST_DECL: case T_UNIT_DECL: case T_ENUM_LIT: - return true; case T_GENERIC_DECL: - return !!(flags & TREE_F_GLOBALLY_STATIC); + return true; case T_ALIAS: - return is_static(tree_value(decl), flags); + return is_static(tree_value(decl)); default: return false; } @@ -1580,27 +1579,28 @@ static bool is_static(tree_t expr, tree_flags_t flags) return true; case T_FCALL: - return !!(tree_flags(expr) & flags); + return !!(tree_flags(expr) & (TREE_F_LOCALLY_STATIC + | TREE_F_GLOBALLY_STATIC)); default: return false; } } -static tree_t longest_static_prefix(tree_t expr, tree_flags_t flags) +tree_t longest_static_prefix(tree_t expr) { switch (tree_kind(expr)) { case T_ARRAY_REF: { tree_t value = tree_value(expr); - tree_t prefix = longest_static_prefix(tree_value(expr), flags); + tree_t prefix = longest_static_prefix(tree_value(expr)); if (prefix != value) return prefix; const int nparams = tree_params(expr); for (int i = 0; i < nparams; i++) { - if (!is_static(tree_value(tree_param(expr, i)), flags)) + if (!is_static(tree_value(tree_param(expr, i)))) return prefix; } @@ -1610,7 +1610,7 @@ static tree_t longest_static_prefix(tree_t expr, tree_flags_t flags) case T_ARRAY_SLICE: { tree_t value = tree_value(expr); - tree_t prefix = longest_static_prefix(tree_value(expr), flags); + tree_t prefix = longest_static_prefix(tree_value(expr)); if (prefix != value) return prefix; @@ -1618,9 +1618,7 @@ static tree_t longest_static_prefix(tree_t expr, tree_flags_t flags) const int nranges = tree_ranges(expr); for (int i = 0; i < nranges; i++) { tree_t r = tree_range(expr, i); - if (!is_static(tree_left(r), flags)) - return prefix; - else if (!is_static(tree_right(r), flags)) + if (!is_static(tree_left(r)) || !is_static(tree_right(r))) return prefix; } @@ -1630,7 +1628,7 @@ static tree_t longest_static_prefix(tree_t expr, tree_flags_t flags) case T_RECORD_REF: { tree_t value = tree_value(expr); - tree_t prefix = longest_static_prefix(tree_value(expr), flags); + tree_t prefix = longest_static_prefix(tree_value(expr)); if (prefix != value) return prefix; @@ -1643,17 +1641,6 @@ static tree_t longest_static_prefix(tree_t expr, tree_flags_t flags) } } -tree_t longest_locally_static_prefix(tree_t expr) -{ - return longest_static_prefix(expr, TREE_F_LOCALLY_STATIC); -} - -tree_t longest_globally_static_prefix(tree_t expr) -{ - return longest_static_prefix(expr, (TREE_F_LOCALLY_STATIC - | TREE_F_GLOBALLY_STATIC)); -} - tree_t body_of(tree_t pack) { const tree_kind_t kind = tree_kind(pack); diff --git a/src/common.h b/src/common.h index 34e75093..57fa0a41 100644 --- a/src/common.h +++ b/src/common.h @@ -77,8 +77,7 @@ void mangle_one_type(text_buf_t *buf, type_t type); tree_t primary_unit_of(tree_t unit); int64_t encode_case_choice(tree_t value, int length, int bits); void to_string(text_buf_t *tb, type_t type, int64_t value); -tree_t longest_locally_static_prefix(tree_t expr); -tree_t longest_globally_static_prefix(tree_t expr); +tree_t longest_static_prefix(tree_t expr); tree_t body_of(tree_t pack); tree_t find_generic_map(tree_t unit, int pos, tree_t g); bool relaxed_rules(void); diff --git a/src/lower.c b/src/lower.c index 29261e5d..f6f7b907 100644 --- a/src/lower.c +++ b/src/lower.c @@ -8482,7 +8482,7 @@ static void lower_driver_target(tree_t target) lower_driver_target(tree_value(tree_assoc(target, i))); } else { - tree_t prefix = longest_globally_static_prefix(target); + tree_t prefix = longest_static_prefix(target); tree_t ref = name_to_ref(prefix); if (ref != NULL && tree_kind(tree_ref(ref)) == T_PARAM_DECL) { diff --git a/src/simp.c b/src/simp.c index 4247cbeb..cb770e36 100644 --- a/src/simp.c +++ b/src/simp.c @@ -884,7 +884,7 @@ static void simp_build_wait(tree_t wait, tree_t expr, bool all) { tree_t ref = name_to_ref(expr); if (ref != NULL && class_of(ref) == C_SIGNAL) { - if (longest_locally_static_prefix(expr) == expr) + if (longest_static_prefix(expr) == expr) tree_add_trigger(wait, expr); else { simp_build_wait(wait, tree_value(expr), all); diff --git a/test/regress/issue112.vhd b/test/regress/issue112.vhd index 2ae7297d..d94bcbef 100644 --- a/test/regress/issue112.vhd +++ b/test/regress/issue112.vhd @@ -41,7 +41,14 @@ begin UGEN: for I in 0 to 7 generate signal C_C :bit; begin - C_C <= '0' when I=0 else C(I-1); + process (C) is + begin + if I=0 then + C_C <= '0'; + else + C_C <= C(I-1); + end if; + end process; UX: entity work.t1 port map(A(I),B(I),C_C,s_pout(V,I)); end generate UGEN; diff --git a/test/regress/issue153.vhd b/test/regress/issue153.vhd index 9ef41c90..6831dae2 100644 --- a/test/regress/issue153.vhd +++ b/test/regress/issue153.vhd @@ -36,14 +36,14 @@ begin --should fail here, but doesn't --GHDL failed here with "bound check failure" -- ghdl drives correct values on each instances, nvc doesn't - C <= C_ADDROUND when v=0 and G_ROUND_ENABLE else s_value(v-1);--bug 1 + --C <= C_ADDROUND when v=0 and G_ROUND_ENABLE else s_value(v-1);--bug 1 -- below is workaround, but I am lazy enough to not use it :)))) - --c_gen: if v=0 and G_ROUND_ENABLE generate - -- C <= C_ADDROUND; - --end generate c_gen; - --nc_gen: if v>0 generate - -- C <= s_value(v-1); - --end generate nc_gen; + c_gen: if v=0 and G_ROUND_ENABLE generate + C <= C_ADDROUND; + end generate c_gen; + nc_gen: if v>0 generate + C <= s_value(v-1); + end generate nc_gen; test_i : entity work.test_inst generic map( -- 2.39.2