Add regression tests for block labels shadowing type identifiers

Check that visible type identifiers can be reused as named block labels. Cover
procedural `begin` blocks, fork blocks, and conditional generate blocks. Also
check matching end labels where the grammar consumes the shared `label_opt`
rule.

The generate test keeps the existing vlog95 compile-error expectation because
named generate scopes are not translated by the vlog95 target.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
Lars-Peter Clausen 2026-07-04 12:26:22 -07:00
parent 06740d0dda
commit f6848300b7
7 changed files with 103 additions and 0 deletions

View File

@ -0,0 +1,28 @@
// Check that block labels can shadow visible type identifiers.
typedef int T;
module test;
reg failed;
reg value;
initial begin
failed = 1'b0;
value = 0;
begin : T
value = value + 1;
end : T
if (value !== 1) begin
$display("FAILED(%0d). block labels did not hide typedefs", `__LINE__);
failed = 1'b1;
end
if (!failed) begin
$display("PASSED");
end
end
endmodule

View File

@ -0,0 +1,28 @@
// Check that fork block labels can shadow visible type identifiers.
typedef int T;
module test;
reg failed;
reg value;
initial begin
failed = 1'b0;
value = 1'b0;
fork : T
value = 1'b1;
join : T
if (value !== 1'b1) begin
$display("FAILED(%0d). fork label did not hide typedef", `__LINE__);
failed = 1'b1;
end
if (!failed) begin
$display("PASSED");
end
end
endmodule

View File

@ -0,0 +1,25 @@
// Check that generate block labels can shadow visible type identifiers.
typedef int G;
module test;
reg failed;
if (1) begin : G
localparam int VALUE = 1;
end : G
initial begin
failed = 1'b0;
if (G.VALUE != 1) begin
$display("FAILED(%0d). generate labels did not hide typedefs", `__LINE__);
failed = 1'b1;
end
if (!failed) begin
$display("PASSED");
end
end
endmodule

View File

@ -386,10 +386,13 @@ sv_soft_packed_union vvp_tests/sv_soft_packed_union.json
sv_soft_packed_union_fail1 vvp_tests/sv_soft_packed_union_fail1.json sv_soft_packed_union_fail1 vvp_tests/sv_soft_packed_union_fail1.json
sv_super_member_fail vvp_tests/sv_super_member_fail.json sv_super_member_fail vvp_tests/sv_super_member_fail.json
sv_type_identifier_ams_name_fields vvp_tests/sv_type_identifier_ams_name_fields.json sv_type_identifier_ams_name_fields vvp_tests/sv_type_identifier_ams_name_fields.json
sv_type_identifier_block_label_name vvp_tests/sv_type_identifier_block_label_name.json
sv_type_identifier_config_name vvp_tests/sv_type_identifier_config_name.json 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_enum_item_name vvp_tests/sv_type_identifier_enum_item_name.json
sv_type_identifier_foreach_name vvp_tests/sv_type_identifier_foreach_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 sv_type_identifier_function_name vvp_tests/sv_type_identifier_function_name.json
sv_type_identifier_generate_label_name vvp_tests/sv_type_identifier_generate_label_name.json
sv_type_identifier_genvar_name vvp_tests/sv_type_identifier_genvar_name.json sv_type_identifier_genvar_name vvp_tests/sv_type_identifier_genvar_name.json
sv_type_identifier_modport_name vvp_tests/sv_type_identifier_modport_name.json sv_type_identifier_modport_name vvp_tests/sv_type_identifier_modport_name.json
sv_type_identifier_module_name vvp_tests/sv_type_identifier_module_name.json sv_type_identifier_module_name vvp_tests/sv_type_identifier_module_name.json

View File

@ -0,0 +1,5 @@
{
"type" : "normal",
"source" : "sv_type_identifier_block_label_name.v",
"iverilog-args" : [ "-g2005-sv" ]
}

View File

@ -0,0 +1,5 @@
{
"type" : "normal",
"source" : "sv_type_identifier_fork_label_name.v",
"iverilog-args" : [ "-g2005-sv" ]
}

View File

@ -0,0 +1,9 @@
{
"type" : "normal",
"source" : "sv_type_identifier_generate_label_name.v",
"iverilog-args" : [ "-g2005-sv" ],
"vlog95" : {
"__comment" : "Named generate scopes are not translated by vlog95",
"type" : "CE"
}
}