From 95dbd349d648595143ae37fa6decd9b3331b5deb Mon Sep 17 00:00:00 2001 From: github action Date: Thu, 5 Feb 2026 08:56:39 +0000 Subject: [PATCH] Apply 'make format' --- src/V3Randomize.cpp | 32 ++++++++++++------- test_regress/t/t_constraint_array_sum_with.py | 0 2 files changed, 21 insertions(+), 11 deletions(-) mode change 100644 => 100755 test_regress/t/t_constraint_array_sum_with.py diff --git a/src/V3Randomize.cpp b/src/V3Randomize.cpp index 5ab2cbde5..7f0f20d6a 100644 --- a/src/V3Randomize.cpp +++ b/src/V3Randomize.cpp @@ -1528,19 +1528,29 @@ class ConstraintExprVisitor final : public VNVisitor { AstNode* perElemExprp = withp->exprp()->cloneTreePure(false); // Substitute lambda argument references with actual array element/index - // Collect nodes to delete after iteration completes to avoid use-after-free - std::vector toDelete; - perElemExprp->foreach([&](AstLambdaArgRef* refp) { - if (refp->index()) { - refp->replaceWith(idxRefp->cloneTreePure(false)); + // Handle case where perElemExprp itself is a LambdaArgRef + if (AstLambdaArgRef* const rootRefp = VN_CAST(perElemExprp, LambdaArgRef)) { + if (rootRefp->index()) { + perElemExprp = idxRefp->cloneTreePure(false); } else { - refp->replaceWith(elemSelp->cloneTreePure(false)); + perElemExprp = elemSelp->cloneTreePure(false); + } + VL_DO_DANGLING(rootRefp->deleteTree(), rootRefp); + } else { + // Collect nodes to delete after iteration completes + std::vector toDelete; + perElemExprp->foreach([&](AstLambdaArgRef* refp) { + if (refp->index()) { + refp->replaceWith(idxRefp->cloneTreePure(false)); + } else { + refp->replaceWith(elemSelp->cloneTreePure(false)); + } + toDelete.push_back(refp); + }); + // Safe to delete now that iteration is complete + for (AstLambdaArgRef* refp : toDelete) { + VL_DO_DANGLING(refp->deleteTree(), refp); } - toDelete.push_back(refp); - }); - // Safe to delete now that iteration is complete - for (AstLambdaArgRef* refp : toDelete) { - VL_DO_DANGLING(refp->deleteTree(), refp); } // Clean up the original template nodes (elemSelp contains idxRefp) VL_DO_DANGLING(elemSelp->deleteTree(), elemSelp); diff --git a/test_regress/t/t_constraint_array_sum_with.py b/test_regress/t/t_constraint_array_sum_with.py old mode 100644 new mode 100755