diff --git a/ivtest/ivltests/sv_type_identifier_for_name.v b/ivtest/ivltests/sv_type_identifier_for_name.v new file mode 100644 index 000000000..2963e6a33 --- /dev/null +++ b/ivtest/ivltests/sv_type_identifier_for_name.v @@ -0,0 +1,32 @@ +// Check that for loop variables can shadow visible type identifiers. + +typedef int T; + +module test; + + reg failed; + int unsigned values [3]; + + initial begin + int unsigned total; + + failed = 1'b0; + total = 0; + + for (int unsigned T = 0; T < 3; T += 1) begin + total += T; + values[T] = 10 + T; + end + + if (total != 3 || values[0] != 10 || + values[1] != 11 || values[2] != 12) begin + $display("FAILED(%0d). for loop variable did not hide typedef", `__LINE__); + failed = 1'b1; + end + + if (!failed) begin + $display("PASSED"); + end + end + +endmodule diff --git a/ivtest/ivltests/sv_type_identifier_foreach_array_name.v b/ivtest/ivltests/sv_type_identifier_foreach_array_name.v new file mode 100644 index 000000000..8a76ebae6 --- /dev/null +++ b/ivtest/ivltests/sv_type_identifier_foreach_array_name.v @@ -0,0 +1,25 @@ +// Check that foreach array expressions can shadow visible type identifiers. + +typedef int A; + +module test; + + reg failed; + + initial begin + failed = 1'b0; + + // The array declaration follows the foreach loop, so the lexer only sees + // the visible typedef when parsing the array expression name. + foreach (A[]) begin + failed = 1'b1; + end + + if (!failed) begin + $display("PASSED"); + end + end + + int unsigned A [3]; + +endmodule diff --git a/ivtest/regress-vvp.list b/ivtest/regress-vvp.list index 04be7ee50..54997d6c5 100644 --- a/ivtest/regress-vvp.list +++ b/ivtest/regress-vvp.list @@ -398,6 +398,8 @@ sv_type_identifier_block_label_name vvp_tests/sv_type_identifier_block_label_nam sv_type_identifier_config_name vvp_tests/sv_type_identifier_config_name.json sv_type_identifier_enum_item_name vvp_tests/sv_type_identifier_enum_item_name.json sv_type_identifier_event_name vvp_tests/sv_type_identifier_event_name.json +sv_type_identifier_for_name vvp_tests/sv_type_identifier_for_name.json +sv_type_identifier_foreach_array_name vvp_tests/sv_type_identifier_foreach_array_name.json sv_type_identifier_foreach_name vvp_tests/sv_type_identifier_foreach_name.json sv_type_identifier_fork_label_name vvp_tests/sv_type_identifier_fork_label_name.json sv_type_identifier_function_name vvp_tests/sv_type_identifier_function_name.json diff --git a/ivtest/vvp_tests/sv_type_identifier_for_name.json b/ivtest/vvp_tests/sv_type_identifier_for_name.json new file mode 100644 index 000000000..0b0e7b9a6 --- /dev/null +++ b/ivtest/vvp_tests/sv_type_identifier_for_name.json @@ -0,0 +1,5 @@ +{ + "type" : "normal", + "source" : "sv_type_identifier_for_name.v", + "iverilog-args" : [ "-g2005-sv" ] +} diff --git a/ivtest/vvp_tests/sv_type_identifier_foreach_array_name.json b/ivtest/vvp_tests/sv_type_identifier_foreach_array_name.json new file mode 100644 index 000000000..b64ff4aea --- /dev/null +++ b/ivtest/vvp_tests/sv_type_identifier_foreach_array_name.json @@ -0,0 +1,5 @@ +{ + "type" : "normal", + "source" : "sv_type_identifier_foreach_array_name.v", + "iverilog-args" : [ "-g2005-sv" ] +}