From 9b3fccdcb79e27c9fbabec79584d629212e6dbef Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Tue, 29 Apr 2025 18:18:54 -0400 Subject: [PATCH] Add BADVLTPRAGMA on unknown Verilator pragmas (#5945). --- Changes | 1 + docs/guide/warnings.rst | 10 ++++++++++ src/V3Error.h | 11 ++++++----- src/V3ParseImp.cpp | 2 +- test_regress/t/t_flag_future_bad.out | 5 +++-- test_regress/t/t_pp_underline_bad.out | 3 ++- 6 files changed, 23 insertions(+), 9 deletions(-) diff --git a/Changes b/Changes index 22cb7979c..acda7d5ef 100644 --- a/Changes +++ b/Changes @@ -13,6 +13,7 @@ Verilator 5.037 devel **Other:** +* Add BADVLTPRAGMA on unknown Verilator pragmas (#5945). [Shou-Li Hsu] * Fix sign extension of signed compared with unsigned case items (#5968). diff --git a/docs/guide/warnings.rst b/docs/guide/warnings.rst index 119957f0c..bf015760f 100644 --- a/docs/guide/warnings.rst +++ b/docs/guide/warnings.rst @@ -167,6 +167,16 @@ List Of Warnings 'pragma protect'. Third-party pragmas not defined by IEEE 1800-2023 are ignored. + This error may be disabled with a lint_off BADSTDPRAGMA metacomment. + + +.. option:: BADVLTPRAGMA + + An error that a `/*verilator ...*/` metacomment pragma is badly formed + or not understood. + + This error may be disabled with a lint_off BADVLTPRAGMA metacomment. + .. option:: BLKANDNBLK diff --git a/src/V3Error.h b/src/V3Error.h index 988fbb775..e051147e8 100644 --- a/src/V3Error.h +++ b/src/V3Error.h @@ -72,6 +72,7 @@ public: ASSIGNDLY, // Assignment delays ASSIGNIN, // Assigning to input BADSTDPRAGMA, // Any error related to pragmas + BADVLTPRAGMA, // Unknown Verilator pragma BLKANDNBLK, // Blocked and non-blocking assignments to same variable BLKLOOPINIT, // Delayed assignment to array inside for loops BLKSEQ, // Blocking assignments in sequential block @@ -193,7 +194,7 @@ public: "LIFETIME", "NEEDTIMINGOPT", "NOTIMING", "PORTSHORT", "TASKNSVAR", "UNSUPPORTED", // Warnings " EC_FIRST_WARN", - "ALWCOMBORDER", "ASCRANGE", "ASSIGNDLY", "ASSIGNIN", "BADSTDPRAGMA", + "ALWCOMBORDER", "ASCRANGE", "ASSIGNDLY", "ASSIGNIN", "BADSTDPRAGMA", "BADVLTPRAGMA", "BLKANDNBLK", "BLKLOOPINIT", "BLKSEQ", "BSSPACE", "CASEINCOMPLETE", "CASEOVERLAP", "CASEWITHX", "CASEX", "CASTCONST", "CDCRSTLOGIC", "CLKDATA", "CMPCONST", "COLONPLUS", "COMBDLY", "CONSTRAINTIGN", "CONTASSREG", "COVERIGN", @@ -232,10 +233,10 @@ public: // Warnings we'll present to the user as errors // Later -Werror- options may make more of these. bool pretendError() const VL_MT_SAFE { - return (m_e == ASSIGNIN || m_e == BADSTDPRAGMA || m_e == BLKANDNBLK || m_e == BLKLOOPINIT - || m_e == CONTASSREG || m_e == ENCAPSULATED || m_e == ENDLABEL || m_e == ENUMVALUE - || m_e == IMPURE || m_e == PINNOTFOUND || m_e == PKGNODECL || m_e == PROCASSWIRE - || m_e == ZEROREPL // Says IEEE + return (m_e == ASSIGNIN || m_e == BADSTDPRAGMA || m_e == BADVLTPRAGMA || m_e == BLKANDNBLK + || m_e == BLKLOOPINIT || m_e == CONTASSREG || m_e == ENCAPSULATED + || m_e == ENDLABEL || m_e == ENUMVALUE || m_e == IMPURE || m_e == PINNOTFOUND + || m_e == PKGNODECL || m_e == PROCASSWIRE || m_e == ZEROREPL // Says IEEE ); } // Warnings to mention manual diff --git a/src/V3ParseImp.cpp b/src/V3ParseImp.cpp index b2126e631..d1686aaf9 100644 --- a/src/V3ParseImp.cpp +++ b/src/V3ParseImp.cpp @@ -196,7 +196,7 @@ void V3ParseImp::lexVerilatorCmtBad(FileLine* fl, const char* textp) { string cmtname; for (int i = 0; std::isalnum(cmtparse[i]); i++) cmtname += cmtparse[i]; if (!v3Global.opt.isFuture(cmtname)) { - fl->v3error("Unknown verilator comment: '" << textp << "'"); + fl->v3warn(BADVLTPRAGMA, "Unknown verilator comment: '" << textp << "'"); } } diff --git a/test_regress/t/t_flag_future_bad.out b/test_regress/t/t_flag_future_bad.out index 67a863bd5..d89fcbc03 100644 --- a/test_regress/t/t_flag_future_bad.out +++ b/test_regress/t/t_flag_future_bad.out @@ -2,10 +2,11 @@ 8 | /*verilator lint_off FUTURE1*/ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ... See the manual at https://verilator.org/verilator_doc.html?v=latest for more assistance. -%Error: t/t_flag_future.v:11:7: Unknown verilator comment: '/*verilator FUTURE2*/' +%Error-BADVLTPRAGMA: t/t_flag_future.v:11:7: Unknown verilator comment: '/*verilator FUTURE2*/' 11 | /*verilator FUTURE2*/ | ^~~~~~~~~~~~~~~~~~~~~ -%Error: t/t_flag_future.v:12:7: Unknown verilator comment: '/*verilator FUTURE2 blah blah*/' + ... For error description see https://verilator.org/warn/BADVLTPRAGMA?v=latest +%Error-BADVLTPRAGMA: t/t_flag_future.v:12:7: Unknown verilator comment: '/*verilator FUTURE2 blah blah*/' 12 | /*verilator FUTURE2 blah blah*/ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %Error: Exiting due to diff --git a/test_regress/t/t_pp_underline_bad.out b/test_regress/t/t_pp_underline_bad.out index 257122558..c6cf038e0 100644 --- a/test_regress/t/t_pp_underline_bad.out +++ b/test_regress/t/t_pp_underline_bad.out @@ -5,7 +5,8 @@ %Error: t/t_pp_underline_bad.v:10:19: Extra underscore in meta-comment; use /*synopsys {...}*/ not /*synopsys_{...}*/ 10 | case (1'b1) // synopsys_full_case | ^~~~~~~~~~~~~~~~~~~~~ -%Error: t/t_pp_underline_bad.v:8:4: Unknown verilator comment: '/*verilator _no_inline_module*/' +%Error-BADVLTPRAGMA: t/t_pp_underline_bad.v:8:4: Unknown verilator comment: '/*verilator _no_inline_module*/' 8 | /*verilator _no_inline_module*/ | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ... For error description see https://verilator.org/warn/BADVLTPRAGMA?v=latest %Error: Exiting due to