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