From 1803aabf4f0e391219cb9da0a498191f7898995e Mon Sep 17 00:00:00 2001 From: Ryszard Rozak Date: Wed, 14 Jan 2026 16:38:35 +0100 Subject: [PATCH] Keep old approach for packed types Signed-off-by: Ryszard Rozak --- src/V3Force.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/V3Force.cpp b/src/V3Force.cpp index de1b677fb..c827ed4fa 100644 --- a/src/V3Force.cpp +++ b/src/V3Force.cpp @@ -556,12 +556,18 @@ class ForceReplaceVisitor final : public VNVisitor { if (ForceState::ForceComponentsVarScope* const fcp = m_state.tryGetForceComponents(nodep)) { FileLine* const flp = nodep->fileline(); - std::vector reversedIndices(m_selIndices.size()); - std::reverse_copy(m_selIndices.begin(), m_selIndices.end(), - reversedIndices.begin()); - AstNodeExpr* const lhsp = ForceState::ForceComponentsVarScope::applySelects( - new AstVarRef{flp, fcp->m_rdVscp, VAccess::WRITE}, reversedIndices); - AstNodeExpr* const rhsp = fcp->forcedUpdate(nodep->varScopep(), reversedIndices); + AstNodeExpr* lhsp = new AstVarRef{flp, fcp->m_rdVscp, VAccess::WRITE}; + AstNodeExpr* rhsp; + if (nodep->dtypep()->skipRefp()->isIntegralOrPacked()) { + rhsp = fcp->forcedUpdate(nodep->varScopep(), {}); + } else { + std::vector reversedIndices(m_selIndices.size()); + std::reverse_copy(m_selIndices.begin(), m_selIndices.end(), + reversedIndices.begin()); + lhsp = ForceState::ForceComponentsVarScope::applySelects( + lhsp, reversedIndices); + rhsp = fcp->forcedUpdate(nodep->varScopep(), reversedIndices); + } m_stmtp->addNextHere(new AstAssign{flp, lhsp, rhsp}); } // Emit valVscp update after each write to any VarRef on forced RHS.