diff --git a/src/V3AstNodeOther.h b/src/V3AstNodeOther.h index 36913ebd4..ff391ef43 100644 --- a/src/V3AstNodeOther.h +++ b/src/V3AstNodeOther.h @@ -1863,6 +1863,7 @@ class AstVar final : public AstNode { bool m_substConstOnly : 1; // Only substitute if constant bool m_overridenParam : 1; // Overridden parameter by #(...) or defparam bool m_trace : 1; // Trace this variable + bool m_isHookInserted : 1; // This variable is instrumented for coverage bool m_isLatched : 1; // Not assigned in all control paths of combo always bool m_isForceable : 1; // May be forced/released externally from user C code bool m_isForcedByCode : 1; // May be forced/released from AstAssignForce/AstRelease @@ -1913,6 +1914,7 @@ class AstVar final : public AstNode { m_substConstOnly = false; m_overridenParam = false; m_trace = false; + m_isHookInserted = false; m_isLatched = false; m_isForceable = false; m_isForcedByCode = false; @@ -2055,6 +2057,8 @@ public: bool gotNansiType() { return m_gotNansiType; } void hasStrengthAssignment(bool flag) { m_hasStrengthAssignment = flag; } bool hasStrengthAssignment() { return m_hasStrengthAssignment; } + void hasHookInserted(bool flag) { m_isHookInserted = flag; } + bool isHookInserted() const { return m_isHookInserted; } void isDpiOpenArray(bool flag) { m_isDpiOpenArray = flag; } bool isDpiOpenArray() const VL_MT_SAFE { return m_isDpiOpenArray; } bool isHideLocal() const { return m_isHideLocal; } diff --git a/src/V3AstNodes.cpp b/src/V3AstNodes.cpp index d7ed985dc..a66b0298c 100644 --- a/src/V3AstNodes.cpp +++ b/src/V3AstNodes.cpp @@ -2790,6 +2790,8 @@ void AstVar::dumpJson(std::ostream& str) const { dumpJsonBoolFunc(str, attrSFormat); dumpJsonBoolFunc(str, ignorePostWrite); dumpJsonBoolFunc(str, ignoreSchedWrite); + dumpJsonBoolFunc(str, isHookInserted); + dumpJsonNum(str, "width", width()); dumpJsonGen(str); } void AstScope::dump(std::ostream& str) const { diff --git a/src/V3InsertHook.cpp b/src/V3InsertHook.cpp index c027ea13c..9183db557 100644 --- a/src/V3InsertHook.cpp +++ b/src/V3InsertHook.cpp @@ -441,6 +441,7 @@ class HookInsTargetFndr final : public VNVisitor { AstVar* varp = nodep->cloneTree(false); varp->name("tmp_" + nodep->name()); varp->origName("tmp_" + nodep->name()); + varp->hasHookInserted(true); varp->trace(true); if (varp->varType() == VVarType::WIRE) { varp->varType(VVarType::VAR); } setVar(nodep, varp, m_target);