From 10f51dc1bf3d7dd229ac4aee69e3e9aa5ea0e86d Mon Sep 17 00:00:00 2001 From: em2machine <92717390+em2machine@users.noreply.github.com> Date: Mon, 22 Dec 2025 08:15:09 +0100 Subject: [PATCH] added fix for further tightening ingress point --- src/V3Undriven.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/V3Undriven.cpp b/src/V3Undriven.cpp index d95001a2b..7d85614de 100644 --- a/src/V3Undriven.cpp +++ b/src/V3Undriven.cpp @@ -447,9 +447,20 @@ class UndrivenVisitor final : public VNVisitorConst { // If writeSummary is enabled, task/function definitions are treated as non-executed. // Their effects are applied at call sites via writeSummary(), so don't let definition // traversal create phantom "other writes" for MULTIDRIVEN. + + //const auto inExecutedContext = [this, nodep]() { + // return !(m_enableWriteSummary && m_taskp && !m_alwaysp && !m_inContAssign && !m_inInitialStatic + // && !m_inBBox && !m_taskp->dpiExport() && !nodep->varp()->isFuncLocal()); + //}; + + //if (!inExecutedContext()) { + // return; + //} + if (m_enableWriteSummary && m_taskp && !m_alwaysp && !m_inContAssign && !m_inInitialStatic - && !m_inBBox) { - return; + && !m_inBBox && !m_taskp->dpiExport()) { + AstVar* const retVarp = VN_CAST(m_taskp->fvarp(), Var); + if (!retVarp || nodep->varp() != retVarp) return; } for (int usr = 1; usr < (m_alwaysCombp ? 3 : 2); ++usr) { @@ -594,7 +605,7 @@ class UndrivenVisitor final : public VNVisitorConst { //}; const auto inExecutedContext = [this]() { - return !(m_taskp && !m_alwaysp && !m_inContAssign && !m_inInitialStatic && !m_inBBox); + return !(m_taskp && !m_alwaysp && !m_inContAssign && !m_inInitialStatic && !m_inBBox && !m_taskp->dpiExport()); }; if (!inExecutedContext()) { return; }