Fix std::randomize inside corrupting class-member queue operand (#7449) (#7456)

Fixes #7449
This commit is contained in:
Yilou Wang
2026-04-21 17:37:58 +02:00
committed by GitHub
parent c60d8f002f
commit 280cff06f3
3 changed files with 81 additions and 1 deletions
+3 -1
View File
@@ -2760,7 +2760,9 @@ class CaptureVisitor final : public VNVisitor {
m_ignore.emplace(thisRefp);
AstMemberSel* const memberSelp
= new AstMemberSel{nodep->fileline(), thisRefp, nodep->varp()};
if (!m_targetp) memberSelp->user1(true);
// Propagate random-dependence marking; forcing it on read-only operands
// would route them through the solver write path.
if (!m_targetp && nodep->user1()) memberSelp->user1(true);
memberSelp->user2p(m_targetp);
nodep->replaceWith(memberSelp);
VL_DO_DANGLING(pushDeletep(nodep), nodep);