diff --git a/src/V3Const.cpp b/src/V3Const.cpp index 9d82909c7..925c74192 100644 --- a/src/V3Const.cpp +++ b/src/V3Const.cpp @@ -229,14 +229,14 @@ private: AstConst* maskp = VN_CAST(nodep->lhsp(), Const); if (!maskp) return false; UINFO(4, "AND(CONSTm, CONDcond(c, i, e))->CONDcond(c, AND(m,i), AND(m, e)) "<cloneType - (condp->condp()->unlinkFrBack(), - new AstAnd(nodep->fileline(), - maskp->cloneTree(false), - condp->expr1p()->unlinkFrBack()), - new AstAnd(nodep->fileline(), - maskp->cloneTree(false), - condp->expr2p()->unlinkFrBack())); + AstNodeCond* newp = static_cast( + condp->cloneType(condp->condp()->unlinkFrBack(), + new AstAnd(nodep->fileline(), + maskp->cloneTree(false), + condp->expr1p()->unlinkFrBack()), + new AstAnd(nodep->fileline(), + maskp->cloneTree(false), + condp->expr2p()->unlinkFrBack()))); newp->dtypeFrom(nodep); newp->expr1p()->dtypeFrom(nodep); // As And might have been to change widths newp->expr2p()->dtypeFrom(nodep);