From db5f454d86105c43087d15e0127eca6dde28a3ba Mon Sep 17 00:00:00 2001 From: Ryszard Rozak Date: Wed, 11 Feb 2026 10:02:47 +0100 Subject: [PATCH] Start cloning from the 2nd iteration Signed-off-by: Ryszard Rozak --- src/V3Force.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/V3Force.cpp b/src/V3Force.cpp index 92126e494..a5cbad137 100644 --- a/src/V3Force.cpp +++ b/src/V3Force.cpp @@ -151,15 +151,17 @@ public: } else if (const AstStructDType* const structDtypep = VN_CAST(lhsDtypep, StructDType)) { AstNodeStmt* stmtsp = nullptr; + bool firstIter = true; for (AstMemberDType* mdtp = structDtypep->membersp(); mdtp; mdtp = VN_AS(mdtp->nextp(), MemberDType)) { - AstNodeExpr* const lhsCopyp = lhsp->cloneTreePure(false); - AstVarRef* const lhsVarRefCopyp = lhsVarRefp->clonep(); + AstNodeExpr* const lhsCopyp = firstIter ? lhsp : lhsp->cloneTreePure(false); + AstVarRef* const lhsVarRefCopyp = firstIter ? lhsVarRefp : lhsVarRefp->clonep(); AstStructSel* const structSelp = new AstStructSel{flp, lhsCopyp, mdtp->name()}; structSelp->dtypep(mdtp); AstNodeStmt* const memberStmtp = getAssignStmtsp(structSelp, vscp, lhsVarRefCopyp, assigns); - stmtsp = stmtsp ? stmtsp->addNext(memberStmtp) : memberStmtp; + stmtsp = firstIter ? memberStmtp : stmtsp->addNext(memberStmtp); + firstIter = false; } return stmtsp; } else if (const AstUnpackArrayDType* const arrayDtypep