From dc00bf248413c0c40c3f144764691e7e0ed38009 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Sat, 13 Dec 2025 21:43:27 -0500 Subject: [PATCH] Fix 'void(' mis-throwing assertion --- src/verilog.y | 4 ++-- test_regress/t/t_castdyn.v | 1 + test_regress/t/t_castdyn_run_bad.out | 4 ++-- test_regress/t/t_castdyn_run_bad.v | 1 + 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/verilog.y b/src/verilog.y index ea28bc97a..59be4e9fb 100644 --- a/src/verilog.y +++ b/src/verilog.y @@ -3583,8 +3583,8 @@ statement_item: // IEEE: statement_item newfl->warnOff(V3ErrorCode::IGNOREDRETURN, true); $6->fileline(newfl); $$ = exprp->makeStmt(); } - | yVOID yP_TICK '(' system_t_stmt_call ')' ';' - { $$ = $4; + | yVOID yP_TICK '(' system_f_only_expr_call ')' ';' + { $$ = new AstStmtExpr{$4, $4}; FileLine* const newfl = new FileLine{$$->fileline()}; newfl->warnOff(V3ErrorCode::IGNOREDRETURN, true); $$->fileline(newfl); } diff --git a/test_regress/t/t_castdyn.v b/test_regress/t/t_castdyn.v index c167c0927..3437d3c15 100644 --- a/test_regress/t/t_castdyn.v +++ b/test_regress/t/t_castdyn.v @@ -77,6 +77,7 @@ module t; i = $cast(bao, b); if (i != 0) $stop; if (bao != ba) $stop; // Unchanged + void'($cast(bao, b)); // Ok as is function $write("*-* All Finished *-*\n"); $finish; diff --git a/test_regress/t/t_castdyn_run_bad.out b/test_regress/t/t_castdyn_run_bad.out index 4cc3bde3a..e75363548 100644 --- a/test_regress/t/t_castdyn_run_bad.out +++ b/test_regress/t/t_castdyn_run_bad.out @@ -1,3 +1,3 @@ -[0] %Error: t_castdyn_run_bad.v:35: Assertion failed in top.t: '$cast' failed. -%Error: t/t_castdyn_run_bad.v:35: Verilog $stop +[0] %Error: t_castdyn_run_bad.v:36: Assertion failed in top.t: '$cast' failed. +%Error: t/t_castdyn_run_bad.v:36: Verilog $stop Aborting... diff --git a/test_regress/t/t_castdyn_run_bad.v b/test_regress/t/t_castdyn_run_bad.v index 2d657b6b8..168369505 100644 --- a/test_regress/t/t_castdyn_run_bad.v +++ b/test_regress/t/t_castdyn_run_bad.v @@ -32,6 +32,7 @@ module t; b = bb; i = $cast(ba1, b); if (i != 0) $stop; + void'($cast(ba1, b)); // ok as is function $cast(ba1, b); // <-- Bad $cast task $write("*-* All Finished *-*\n");