From fde380868a0bb19fda33b57ee4f67c1e156025d4 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Thu, 29 Dec 2022 13:59:24 -0500 Subject: [PATCH] Fix misc memory leaks --- src/V3Assert.cpp | 1 + src/V3ParseGrammar.cpp | 3 +++ src/verilog.y | 3 ++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/V3Assert.cpp b/src/V3Assert.cpp index cf2de9ad0..d4cd42d8e 100644 --- a/src/V3Assert.cpp +++ b/src/V3Assert.cpp @@ -368,6 +368,7 @@ private: inp = new AstVarRef{nodep->fileline(), invarp, VAccess::READ}; } nodep->replaceWith(inp); + VL_DO_DANGLING(pushDeletep(nodep), nodep); } //========== Move $sampled down to read-only variables diff --git a/src/V3ParseGrammar.cpp b/src/V3ParseGrammar.cpp index 278dd2a2b..d6ad5438f 100644 --- a/src/V3ParseGrammar.cpp +++ b/src/V3ParseGrammar.cpp @@ -138,13 +138,16 @@ AstNodeDType* V3ParseGrammar::createArray(AstNodeDType* basep, AstNodeRange* nra rangep}; } else if (VN_IS(nrangep, UnsizedRange)) { arrayp = new AstUnsizedArrayDType{nrangep->fileline(), VFlagChildDType{}, arrayp}; + VL_DO_DANGLING(nrangep->deleteTree(), nrangep); } else if (VN_IS(nrangep, BracketRange)) { const AstBracketRange* const arangep = VN_AS(nrangep, BracketRange); AstNode* const keyp = arangep->elementsp()->unlinkFrBack(); arrayp = new AstBracketArrayDType{nrangep->fileline(), VFlagChildDType{}, arrayp, keyp}; + VL_DO_DANGLING(nrangep->deleteTree(), nrangep); } else if (VN_IS(nrangep, WildcardRange)) { arrayp = new AstWildcardArrayDType{nrangep->fileline(), VFlagChildDType{}, arrayp}; + VL_DO_DANGLING(nrangep->deleteTree(), nrangep); } else { UASSERT_OBJ(0, nrangep, "Expected range or unsized range"); } diff --git a/src/verilog.y b/src/verilog.y index 47622b8ce..ecb3b4e07 100644 --- a/src/verilog.y +++ b/src/verilog.y @@ -2105,7 +2105,8 @@ struct_union_member: // ==IEEE: struct_union_member // // UNSUP random_qualifer not propagagted until have randomize support random_qualifierE data_type_or_void /*mid*/ { GRAMMARP->m_memDTypep = $2; } // As a list follows, need to attach this dtype to each member. - /*cont*/ list_of_member_decl_assignments ';' { $$ = $4; GRAMMARP->m_memDTypep = nullptr; } + /*cont*/ list_of_member_decl_assignments ';' + { $$ = $4; DEL(GRAMMARP->m_memDTypep); GRAMMARP->m_memDTypep = nullptr; } | vlTag { $$ = nullptr; } ;