Fix memory leaks

Signed-off-by: Ryszard Rozak <rrozak@antmicro.com>
This commit is contained in:
Ryszard Rozak 2026-01-15 15:49:25 +01:00
parent c159935321
commit 3dda440d17
1 changed files with 7 additions and 6 deletions

View File

@ -223,7 +223,9 @@ public:
return refp; return refp;
} else { } else {
AstNodeExpr* const copiedExprp = exprp->cloneTreePure(false); AstNodeExpr* const copiedExprp = exprp->cloneTreePure(false);
AstNode* const oldRefp = varRefToReplacep->clonep();
varRefToReplacep->clonep()->replaceWith(refp); varRefToReplacep->clonep()->replaceWith(refp);
oldRefp->deleteTree();
return copiedExprp; return copiedExprp;
} }
} }
@ -576,20 +578,19 @@ class ForceReplaceVisitor final : public VNVisitor {
if (ForceState::ForceComponentsVarScope* const fcp if (ForceState::ForceComponentsVarScope* const fcp
= m_state.tryGetForceComponents(nodep)) { = m_state.tryGetForceComponents(nodep)) {
FileLine* const flp = nodep->fileline(); FileLine* const flp = nodep->fileline();
AstNodeExpr* lhsp = new AstVarRef{flp, fcp->m_rdVscp, VAccess::WRITE}; AstVarRef* const lhsRefp = new AstVarRef{flp, fcp->m_rdVscp, VAccess::WRITE};
AstNodeExpr* lhsp;
AstNodeExpr* rhsp; AstNodeExpr* rhsp;
if (nodep->dtypep()->skipRefp()->isIntegralOrPacked()) { if (nodep->dtypep()->skipRefp()->isIntegralOrPacked()) {
rhsp = fcp->forcedUpdate(nodep->varScopep(), {}); rhsp = fcp->forcedUpdate(nodep->varScopep(), {});
lhsp = lhsRefp;
} else { } else {
AstNodeExpr* wholeExprp = nodep; AstNodeExpr* wholeExprp = nodep;
while (VN_IS(wholeExprp->backp(), NodeExpr)) { while (VN_IS(wholeExprp->backp(), NodeExpr)) {
wholeExprp = VN_AS(wholeExprp->backp(), NodeExpr); wholeExprp = VN_AS(wholeExprp->backp(), NodeExpr);
} }
if (wholeExprp != nodep) { lhsp = ForceState::ForceComponentsVarScope::wrapIntoExprp(lhsRefp, wholeExprp,
AstNodeExpr* const lhsExprp = wholeExprp->cloneTreePure(false); nodep);
nodep->clonep()->replaceWith(lhsp);
lhsp = lhsExprp;
}
rhsp = fcp->forcedUpdate(nodep->varScopep(), wholeExprp, nodep); rhsp = fcp->forcedUpdate(nodep->varScopep(), wholeExprp, nodep);
} }
m_stmtp->addNextHere(new AstAssign{flp, lhsp, rhsp}); m_stmtp->addNextHere(new AstAssign{flp, lhsp, rhsp});