Fix memory leaks
Signed-off-by: Ryszard Rozak <rrozak@antmicro.com>
This commit is contained in:
parent
c159935321
commit
3dda440d17
|
|
@ -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});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue