From eda9fdcd13d7566b9aab29a8a098e2f4189ea3f3 Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Sun, 26 Jul 2026 12:07:17 -0700 Subject: [PATCH] Add regression test for imported typedef reference order Check that a typedef reference in a nested scope keeps the package typedef selected during parsing when another typedef with the same name is imported later. Check that a reference following the import selects the new typedef. Signed-off-by: Lars-Peter Clausen --- .../sv_package_import_order_typedef.v | 39 +++++++++++++++++++ ivtest/regress-vvp.list | 1 + .../sv_package_import_order_typedef.json | 5 +++ 3 files changed, 45 insertions(+) create mode 100644 ivtest/ivltests/sv_package_import_order_typedef.v create mode 100644 ivtest/vvp_tests/sv_package_import_order_typedef.json diff --git a/ivtest/ivltests/sv_package_import_order_typedef.v b/ivtest/ivltests/sv_package_import_order_typedef.v new file mode 100644 index 000000000..035f5bc59 --- /dev/null +++ b/ivtest/ivltests/sv_package_import_order_typedef.v @@ -0,0 +1,39 @@ +// Check package import ordering for types in nested scopes. + +package p1; + typedef logic [1:0] type_t; +endpackage + +package p2; + typedef logic [3:0] type_t; +endpackage + +module test; + + import p1::type_t; + + reg failed; + + `define check(val, exp) \ + if (val !== exp) begin \ + $display("FAILED(%0d). '%s' expected %b, got %b", `__LINE__, \ + `"val`", exp, val); \ + failed = 1'b1; \ + end + + initial begin : b + type_t value_before; + import p2::type_t; + type_t value_after; + + failed = 1'b0; + + `check($bits(value_before), 2); + `check($bits(value_after), 4); + + if (!failed) begin + $display("PASSED"); + end + end + +endmodule diff --git a/ivtest/regress-vvp.list b/ivtest/regress-vvp.list index 4a871549d..199e737c9 100644 --- a/ivtest/regress-vvp.list +++ b/ivtest/regress-vvp.list @@ -399,6 +399,7 @@ sv_module_port3 vvp_tests/sv_module_port3.json sv_module_port4 vvp_tests/sv_module_port4.json sv_net_array_decl_assign vvp_tests/sv_net_array_decl_assign.json sv_net_decl_assign vvp_tests/sv_net_decl_assign.json +sv_package_import_order_typedef vvp_tests/sv_package_import_order_typedef.json sv_package_lifetime vvp_tests/sv_package_lifetime.json sv_package_lifetime_fail vvp_tests/sv_package_lifetime_fail.json parameter_omit1 vvp_tests/parameter_omit1.json diff --git a/ivtest/vvp_tests/sv_package_import_order_typedef.json b/ivtest/vvp_tests/sv_package_import_order_typedef.json new file mode 100644 index 000000000..635c9cbda --- /dev/null +++ b/ivtest/vvp_tests/sv_package_import_order_typedef.json @@ -0,0 +1,5 @@ +{ + "type" : "normal", + "source" : "sv_package_import_order_typedef.v", + "iverilog-args" : [ "-g2005-sv" ] +}