diff --git a/src/V3FsmDetect.cpp b/src/V3FsmDetect.cpp index 2d4a37e9a..d0f3049c3 100644 --- a/src/V3FsmDetect.cpp +++ b/src/V3FsmDetect.cpp @@ -988,15 +988,11 @@ class FsmDetectVisitor final : public VNVisitor { return assp; } - static AstVarRef* extractVarRefQuiet(AstNodeExpr* const exprp) { - return VN_CAST(AstArraySel::baseFromp(exprp, true), VarRef); - } - static AstNodeAssign* nodeStateVarAssign(AstNode* nodep, AstVarScope*& stateVscp, AstVarScope*& fromVscp) { AstNodeAssign* const assp = VN_CAST(nodep, NodeAssign); if (!assp) return nullptr; - AstVarRef* const lhsp = extractVarRefQuiet(assp->lhsp()); + AstVarRef* const lhsp = VN_CAST(AstArraySel::baseFromp(assp->lhsp(), true), VarRef); AstVarRef* const rhsp = VN_CAST(assp->rhsp(), VarRef); if (!rhsp || !lhsp) return nullptr; stateVscp = lhsp->varScopep(); @@ -1010,7 +1006,7 @@ class FsmDetectVisitor final : public VNVisitor { FsmStateValue& resetValue) { AstNodeAssign* const assp = VN_CAST(nodep, NodeAssign); if (!assp) return nullptr; - AstVarRef* const lhsp = extractVarRefQuiet(assp->lhsp()); + AstVarRef* const lhsp = VN_CAST(AstArraySel::baseFromp(assp->lhsp(), true), VarRef); AstCond* const rhsp = VN_CAST(assp->rhsp(), Cond); if (!rhsp || !lhsp) return nullptr; if (AstVarRef* const elsep = VN_CAST(rhsp->elsep(), VarRef)) { @@ -1222,7 +1218,7 @@ class FsmDetectVisitor final : public VNVisitor { AstVarRef* vrefp = VN_CAST(eqp->lhsp(), VarRef); AstNodeExpr* valuep = eqp->rhsp(); if (!vrefp) { - vrefp = extractVarRefQuiet(eqp->rhsp()); + vrefp = VN_CAST(AstArraySel::baseFromp(eqp->rhsp(), true), VarRef); if (!vrefp) { return false; } valuep = eqp->lhsp(); }