Internals: Fix not clearing packagep on some assignments. Should affect assertions only.
This commit is contained in:
parent
fd21a41acd
commit
dc1f44840d
|
|
@ -106,6 +106,9 @@ private:
|
||||||
}
|
}
|
||||||
if (AstNode* subnodep = nodep->getChildDTypep()) subnodep->user1Inc();
|
if (AstNode* subnodep = nodep->getChildDTypep()) subnodep->user1Inc();
|
||||||
}
|
}
|
||||||
|
void checkVarRef(AstNodeVarRef* nodep) {
|
||||||
|
if (nodep->packagep() && m_elimCells) { nodep->packagep(nullptr); }
|
||||||
|
}
|
||||||
void checkDType(AstNodeDType* nodep) {
|
void checkDType(AstNodeDType* nodep) {
|
||||||
if (!nodep->generic() // Don't remove generic types
|
if (!nodep->generic() // Don't remove generic types
|
||||||
&& m_elimDTypes // dtypes stick around until post-widthing
|
&& m_elimDTypes // dtypes stick around until post-widthing
|
||||||
|
|
@ -159,20 +162,16 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void visit(AstNodeVarRef* nodep) override {
|
virtual void visit(AstNodeVarRef* nodep) override {
|
||||||
|
// Note NodeAssign skips calling this in some cases
|
||||||
iterateChildren(nodep);
|
iterateChildren(nodep);
|
||||||
checkAll(nodep);
|
checkAll(nodep);
|
||||||
|
checkVarRef(nodep);
|
||||||
if (nodep->varScopep()) {
|
if (nodep->varScopep()) {
|
||||||
nodep->varScopep()->user1Inc();
|
nodep->varScopep()->user1Inc();
|
||||||
nodep->varScopep()->varp()->user1Inc();
|
nodep->varScopep()->varp()->user1Inc();
|
||||||
}
|
}
|
||||||
if (nodep->varp()) nodep->varp()->user1Inc();
|
if (nodep->varp()) nodep->varp()->user1Inc();
|
||||||
if (nodep->packagep()) {
|
if (nodep->packagep()) nodep->packagep()->user1Inc();
|
||||||
if (m_elimCells) {
|
|
||||||
nodep->packagep(nullptr);
|
|
||||||
} else {
|
|
||||||
nodep->packagep()->user1Inc();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
virtual void visit(AstNodeFTaskRef* nodep) override {
|
virtual void visit(AstNodeFTaskRef* nodep) override {
|
||||||
iterateChildren(nodep);
|
iterateChildren(nodep);
|
||||||
|
|
@ -276,6 +275,8 @@ private:
|
||||||
// See if simple assignments to variables may be eliminated because
|
// See if simple assignments to variables may be eliminated because
|
||||||
// that variable is never used.
|
// that variable is never used.
|
||||||
// Similar code in V3Life
|
// Similar code in V3Life
|
||||||
|
VL_RESTORER(m_sideEffect);
|
||||||
|
{
|
||||||
m_sideEffect = false;
|
m_sideEffect = false;
|
||||||
iterateAndNextNull(nodep->rhsp());
|
iterateAndNextNull(nodep->rhsp());
|
||||||
checkAll(nodep);
|
checkAll(nodep);
|
||||||
|
|
@ -285,10 +286,11 @@ private:
|
||||||
&& varrefp->varScopep()) { // For simplicity, we only remove post-scoping
|
&& varrefp->varScopep()) { // For simplicity, we only remove post-scoping
|
||||||
m_assignMap.insert(make_pair(varrefp->varScopep(), nodep));
|
m_assignMap.insert(make_pair(varrefp->varScopep(), nodep));
|
||||||
checkAll(varrefp); // Must track reference to dtype()
|
checkAll(varrefp); // Must track reference to dtype()
|
||||||
|
checkVarRef(varrefp);
|
||||||
} else { // Track like any other statement
|
} else { // Track like any other statement
|
||||||
iterateAndNextNull(nodep->lhsp());
|
iterateAndNextNull(nodep->lhsp());
|
||||||
}
|
}
|
||||||
checkAll(nodep);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----
|
//-----
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue