aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKamil Rakoczy <krakoczy@antmicro.com>2021-02-04 12:12:59 +0100
committerKamil Rakoczy <krakoczy@antmicro.com>2021-02-04 17:16:30 +0100
commit98c4feb72ff52f12aadd34b0deccb819d701ff2c (patch)
treea1d186a2cf2830f84711ce4d097154f30313310b
parentbaf1875307f1608762169d3037ba005da88b201e (diff)
downloadyosys-98c4feb72ff52f12aadd34b0deccb819d701ff2c.tar.gz
yosys-98c4feb72ff52f12aadd34b0deccb819d701ff2c.tar.bz2
yosys-98c4feb72ff52f12aadd34b0deccb819d701ff2c.zip
Add check of begin/end labels for genblock
Signed-off-by: Kamil Rakoczy <krakoczy@antmicro.com>
-rw-r--r--frontends/verilog/verilog_parser.y2
-rw-r--r--tests/verilog/block_labels.ys26
2 files changed, 28 insertions, 0 deletions
diff --git a/frontends/verilog/verilog_parser.y b/frontends/verilog/verilog_parser.y
index 6255a4204..fb5846f7b 100644
--- a/frontends/verilog/verilog_parser.y
+++ b/frontends/verilog/verilog_parser.y
@@ -2794,6 +2794,8 @@ gen_block:
ast_stack.push_back(node);
} module_gen_body TOK_END opt_label {
exitTypeScope();
+ if ($3 != NULL && $7 != NULL && *$3 != *$7)
+ frontend_verilog_yyerror("Begin label (%s) and end label (%s) don't match.", $3->c_str()+1, $7->c_str()+1);
delete $3;
delete $7;
SET_AST_NODE_LOC(ast_stack.back(), @1, @7);
diff --git a/tests/verilog/block_labels.ys b/tests/verilog/block_labels.ys
new file mode 100644
index 000000000..e76bcf771
--- /dev/null
+++ b/tests/verilog/block_labels.ys
@@ -0,0 +1,26 @@
+read_verilog <<EOT
+module foo;
+
+ genvar a = 0;
+ for (a = 0; a < 10; a++) begin : a
+ end : a
+endmodule
+EOT
+read_verilog <<EOT
+module foo2;
+
+ genvar a = 0;
+ for (a = 0; a < 10; a++) begin : a
+ end
+endmodule
+EOT
+
+logger -expect error "Begin label \(a\) and end label \(b\) don't match\." 1
+read_verilog <<EOT
+module foo3;
+
+ genvar a = 0;
+ for (a = 0; a < 10; a++) begin : a
+ end : b
+endmodule
+EOT