From fd52f7f47933a4a9230b6411417eacda0fe6b8b9 Mon Sep 17 00:00:00 2001 From: Geza Lore Date: Sun, 1 Jan 2023 12:10:33 +0000 Subject: [PATCH] Fix memory leak in V3Sched. Fixes #3834. --- src/V3Sched.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/V3Sched.cpp b/src/V3Sched.cpp index 54d2bacce..601b82c7b 100644 --- a/src/V3Sched.cpp +++ b/src/V3Sched.cpp @@ -1072,7 +1072,6 @@ void schedule(AstNetlist* netlistp) { = [=](std::unordered_map map, AstVarScope* vscp) { // Copy map auto newMap{map}; - VNDeleter deleter; // Replace references in each mapped value with a reference to the given vscp for (auto& pair : newMap) { pair.second = pair.second->cloneTree(false); @@ -1080,7 +1079,7 @@ void schedule(AstNetlist* netlistp) { UASSERT_OBJ(refp->varScopep() == actTrigVscp, refp, "Unexpected reference"); UASSERT_OBJ(refp->access() == VAccess::READ, refp, "Should be read ref"); refp->replaceWith(new AstVarRef{refp->fileline(), vscp, VAccess::READ}); - deleter.pushDeletep(refp); + VL_DO_DANGLING(refp->deleteTree(), refp); }); topScopep->addSenTreesp(pair.second); } @@ -1160,6 +1159,7 @@ void schedule(AstNetlist* netlistp) { UASSERT_OBJ(refp->access().isReadOnly(), refp, "Should only read state"); if (refp->varScopep() == actTrig.m_vscp) { refp->replaceWith(new AstVarRef{refp->fileline(), trigVscp, VAccess::READ}); + VL_DO_DANGLING(refp->deleteTree(), refp); } }); dumpp->foreach([&](AstText* textp) { //