diff --git a/src/V3Const.cpp b/src/V3Const.cpp index ec0458408..f26b498b9 100644 --- a/src/V3Const.cpp +++ b/src/V3Const.cpp @@ -1273,6 +1273,7 @@ private: nodep->iterateChildren(*this); if (m_doNConst && (nodep->sensp()->castConst() + || nodep->sensp()->castEnumItemRef() || (nodep->varrefp() && nodep->varrefp()->varp()->isParam()))) { // Constants in sensitivity lists may be removed (we'll simplify later) if (nodep->isClocked()) { // A constant can never get a pos/negexge @@ -1301,6 +1302,9 @@ private: if (!senvarp) sensp->v3fatalSrc("Non-varref sensitivity variable"); sensp->replaceWith(senvarp); sensp->deleteTree(); sensp=NULL; + } else if (!m_doNConst // Deal with later when doNConst missing + && (nodep->sensp()->castEnumItemRef() + || nodep->sensp()->castConst())) { } else { if (nodep->hasVar() && !nodep->varrefp()) nodep->v3fatalSrc("Null sensitivity variable"); } diff --git a/src/V3LinkResolve.cpp b/src/V3LinkResolve.cpp index fffe0b283..b6eca8f82 100644 --- a/src/V3LinkResolve.cpp +++ b/src/V3LinkResolve.cpp @@ -183,7 +183,8 @@ private: } } } - if (!nodep->sensp()->castNodeVarRef()) { + if (!nodep->sensp()->castNodeVarRef() + && !nodep->sensp()->castEnumItemRef()) { // V3Const will cleanup if (debug()) nodep->dumpTree(cout,"-tree: "); nodep->v3error("Unsupported: Complex statement in sensitivity list"); } diff --git a/test_regress/t/t_package_enum.v b/test_regress/t/t_package_enum.v index 0e6014521..bb2d719c5 100644 --- a/test_regress/t/t_package_enum.v +++ b/test_regress/t/t_package_enum.v @@ -15,6 +15,12 @@ module t; reg [1:0] ttype; reg m; + enum bit [1:0] { LOCAL } l; + + always @ (m or 1'b0 or LOCAL) begin + // Don't complain about constants in sensitivity lists + end + initial begin ttype = pkg::E__NOT; m = (ttype == pkg::E__VAL);