Skip to content

Commit e35c701

Browse files
committed
Verilog: fix for named generate block scopes
Verilog generate blocks may be named, which creates a scope.
1 parent 5906108 commit e35c701

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

regression/verilog/typedef/typedef2.sv

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ module main();
2323
end
2424
endtask
2525

26+
// module item inside a named generate block
27+
if (1) begin: some_block
28+
typedef logic some_type;
29+
some_type some_var;
30+
end // checks
31+
32+
// named procedural block
2633
always @my_type2_var begin : named_block
2734
typedef bit my_type5;
2835
my_type5 my_type5_var;

src/verilog/parser.y

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3163,9 +3163,12 @@ generate_block:
31633163
generate_item
31643164
| TOK_BEGIN generate_item_brace TOK_END
31653165
{ init($$, ID_generate_block); swapop($$, $2); }
3166-
| TOK_BEGIN TOK_COLON generate_block_identifier generate_item_brace TOK_END
3167-
{ init($$, ID_generate_block);
3168-
swapop($$, $4);
3166+
| TOK_BEGIN TOK_COLON generate_block_identifier
3167+
{ push_scope(stack_expr($3).id(), ".", verilog_scopet::BLOCK); }
3168+
generate_item_brace TOK_END
3169+
{ pop_scope();
3170+
init($$, ID_generate_block);
3171+
swapop($$, $5);
31693172
stack_expr($$).set(ID_base_name, stack_expr($3).id()); }
31703173
;
31713174

0 commit comments

Comments
 (0)