From 5d26bca55cb9e2126f2d74a358303c7f51e1e26f Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Wed, 13 Jun 2018 18:05:00 -0400 Subject: [PATCH 1/2] Internals: Remove unneeded returns on asserts. --- src/V3Ast.cpp | 32 ++++++++++++++++---------------- src/V3Const.cpp | 4 ++-- src/V3Descope.cpp | 2 +- src/V3File.h | 2 +- src/V3Graph.cpp | 4 ++-- src/V3Order.cpp | 4 ++-- src/V3OrderGraph.h | 4 ++-- 7 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/V3Ast.cpp b/src/V3Ast.cpp index d9d89339b..d23eba353 100644 --- a/src/V3Ast.cpp +++ b/src/V3Ast.cpp @@ -291,8 +291,8 @@ void AstNode::addNextHere(AstNode* newp) { // This could be at head, tail, or both (single) // New could be head of single node, or list UDEBUGONLY(UASSERT(dynamic_cast(this),"this should not be NULL");); - UASSERT(newp,"Null item passed to addNext"); - UASSERT(newp->backp()==NULL,"New node (back) already assigned?"); + UASSERT(newp, "Null item passed to addNext"); + UASSERT(!newp->backp(), "New node (back) already assigned?"); this->debugTreeChange("-addHereThs: ", __LINE__, false); newp->debugTreeChange("-addHereNew: ", __LINE__, true); newp->editCountInc(); @@ -335,7 +335,7 @@ void AstNode::addNextHere(AstNode* newp) { } void AstNode::setOp1p(AstNode* newp) { - UASSERT(newp,"Null item passed to setOp1p\n"); + UASSERT(newp, "Null item passed to setOp1p"); UDEBUGONLY(if (m_op1p) this->v3fatalSrc("Adding to non-empty, non-list op1");); UDEBUGONLY(if (newp->m_backp) newp->v3fatalSrc("Adding already linked node");); UDEBUGONLY(if (newp->m_nextp) newp->v3fatalSrc("Adding list to non-list op1");); @@ -348,7 +348,7 @@ void AstNode::setOp1p(AstNode* newp) { } void AstNode::setOp2p(AstNode* newp) { - UASSERT(newp,"Null item passed to setOp2p\n"); + UASSERT(newp, "Null item passed to setOp2p"); UDEBUGONLY(if (m_op2p) this->v3fatalSrc("Adding to non-empty, non-list op2");); UDEBUGONLY(if (newp->m_backp) newp->v3fatalSrc("Adding already linked node");); UDEBUGONLY(if (newp->m_nextp) newp->v3fatalSrc("Adding list to non-list op2");); @@ -361,7 +361,7 @@ void AstNode::setOp2p(AstNode* newp) { } void AstNode::setOp3p(AstNode* newp) { - UASSERT(newp,"Null item passed to setOp3p\n"); + UASSERT(newp, "Null item passed to setOp3p"); UDEBUGONLY(if (m_op3p) this->v3fatalSrc("Adding to non-empty, non-list op3");); UDEBUGONLY(if (newp->m_backp) newp->v3fatalSrc("Adding already linked node");); UDEBUGONLY(if (newp->m_nextp) newp->v3fatalSrc("Adding list to non-list op3");); @@ -374,7 +374,7 @@ void AstNode::setOp3p(AstNode* newp) { } void AstNode::setOp4p(AstNode* newp) { - UASSERT(newp,"Null item passed to setOp4p\n"); + UASSERT(newp, "Null item passed to setOp4p"); UDEBUGONLY(if (m_op4p) this->v3fatalSrc("Adding to non-empty, non-list op4");); UDEBUGONLY(if (newp->m_backp) newp->v3fatalSrc("Adding already linked node");); UDEBUGONLY(if (newp->m_nextp) newp->v3fatalSrc("Adding list to non-list op4");); @@ -387,25 +387,25 @@ void AstNode::setOp4p(AstNode* newp) { } void AstNode::addOp1p(AstNode* newp) { - UASSERT(newp,"Null item passed to addOp1p\n"); + UASSERT(newp, "Null item passed to addOp1p"); if (!m_op1p) { op1p(newp); } else { m_op1p->addNext(newp); } } void AstNode::addOp2p(AstNode* newp) { - UASSERT(newp,"Null item passed to addOp2p\n"); + UASSERT(newp, "Null item passed to addOp2p"); if (!m_op2p) { op2p(newp); } else { m_op2p->addNext(newp); } } void AstNode::addOp3p(AstNode* newp) { - UASSERT(newp,"Null item passed to addOp3p\n"); + UASSERT(newp, "Null item passed to addOp3p"); if (!m_op3p) { op3p(newp); } else { m_op3p->addNext(newp); } } void AstNode::addOp4p(AstNode* newp) { - UASSERT(newp,"Null item passed to addOp4p\n"); + UASSERT(newp, "Null item passed to addOp4p"); if (!m_op4p) { op4p(newp); } else { m_op4p->addNext(newp); } } @@ -431,7 +431,7 @@ void AstNRelinker::dump(ostream& str) const { AstNode* AstNode::unlinkFrBackWithNext(AstNRelinker* linkerp) { this->debugTreeChange("-unlinkWNextThs: ", __LINE__, true); AstNode* oldp = this; - UASSERT(oldp->m_backp,"Node has no back, already unlinked?\n"); + UASSERT(oldp->m_backp, "Node has no back, already unlinked?"); oldp->editCountInc(); AstNode* backp = oldp->m_backp; if (linkerp) { @@ -479,7 +479,7 @@ AstNode* AstNode::unlinkFrBackWithNext(AstNRelinker* linkerp) { AstNode* AstNode::unlinkFrBack(AstNRelinker* linkerp) { this->debugTreeChange("-unlinkFrBkThs: ", __LINE__, true); AstNode* oldp = this; - UASSERT(oldp->m_backp,"Node has no back, already unlinked?\n"); + UASSERT(oldp->m_backp, "Node has no back, already unlinked?"); oldp->editCountInc(); AstNode* backp = oldp->m_backp; if (linkerp) { @@ -531,8 +531,8 @@ AstNode* AstNode::unlinkFrBack(AstNRelinker* linkerp) { void AstNode::relink(AstNRelinker* linkerp) { if (debug()>8) { UINFO(0," EDIT: relink: "); dumpPtrs(); } AstNode* newp = this; - UASSERT(linkerp && linkerp->m_backp, "Need non-empty linker\n"); - UASSERT(newp->backp()==NULL, "New node already linked?\n"); + UASSERT(linkerp && linkerp->m_backp, "Need non-empty linker"); + UASSERT(!newp->backp(), "New node already linked?"); newp->editCountInc(); if (debug()>8) { linkerp->dump(cout); cout<m_nextp = (AstNode*)1; @@ -713,7 +713,7 @@ void AstNode::deleteTreeIter() { void AstNode::deleteTree() { // deleteTree always deletes the next link, because you must have called // unlinkFromBack or unlinkFromBackWithNext as appropriate before calling this. - UASSERT(m_backp==NULL,"Delete called on node with backlink still set\n"); + UASSERT(!m_backp, "Delete called on node with backlink still set"); this->debugTreeChange("-delTree: ", __LINE__, true); this->editCountInc(); // MUST be depth first! diff --git a/src/V3Const.cpp b/src/V3Const.cpp index ba26d5e98..8d451d422 100644 --- a/src/V3Const.cpp +++ b/src/V3Const.cpp @@ -589,7 +589,7 @@ private: void replaceNum (AstNode* oldp, const V3Number& num) { // Replace oldp node with a constant set to specified value - UASSERT (oldp, "Null old\n"); + UASSERT(oldp, "Null old"); if (oldp->castConst() && !oldp->castConst()->num().isFourState()) { oldp->v3fatalSrc("Already constant??"); } @@ -662,7 +662,7 @@ private: void replaceConstString (AstNode* oldp, const string& num) { // Replace oldp node with a constant set to specified value - UASSERT (oldp, "Null old\n"); + UASSERT(oldp, "Null old"); AstNode* newp = new AstConst(oldp->fileline(), AstConst::String(), num); if (debug()>5) oldp->dumpTree(cout," const_old: "); if (debug()>5) newp->dumpTree(cout," _new: "); diff --git a/src/V3Descope.cpp b/src/V3Descope.cpp index e55a0f4bd..aea805d84 100644 --- a/src/V3Descope.cpp +++ b/src/V3Descope.cpp @@ -87,7 +87,7 @@ private: // false if the object is in another scope. string descopedName(const AstScope* scopep, bool& hierThisr, const AstVar* varp=NULL) { - UASSERT(scopep, "Var/Func not scoped\n"); + UASSERT(scopep, "Var/Func not scoped"); hierThisr = (scopep == m_scopep); // It's possible to disable relative references. This is a concession diff --git a/src/V3File.h b/src/V3File.h index 02fefebaf..f8a6e9763 100644 --- a/src/V3File.h +++ b/src/V3File.h @@ -152,7 +152,7 @@ public: void indentInc() { m_indentLevel += m_blockIndent; } void indentDec() { m_indentLevel -= m_blockIndent; - UASSERT(m_indentLevel>=0, ": "<=0, ": "<verticesNextp()) { OrderEitherVertex* vertexp = dynamic_cast(itp); - UASSERT(vertexp, "Null or vertex not derived from EitherVertex\n"); + UASSERT(vertexp, "Null or vertex not derived from EitherVertex"); processDomainsIterate(vertexp); } } @@ -1509,7 +1509,7 @@ void OrderVisitor::processMoveDoneOne(OrderMoveVertex* vertexp) { } void OrderVisitor::processMoveOne(OrderMoveVertex* vertexp, OrderMoveDomScope* domScopep, int level) { - UASSERT(vertexp->domScopep() == domScopep, "Domain mismatch; list misbuilt?\n"); + UASSERT(vertexp->domScopep() == domScopep, "Domain mismatch; list misbuilt?"); OrderLogicVertex* lvertexp = vertexp->logicp(); AstScope* scopep = lvertexp->scopep(); UINFO(5," POSmove l"<Ready on node not in proper state\n"); + UASSERT(m_state==POM_WAIT, "Wait->Ready on node not in proper state"); m_state = POM_READY; } void setMoved() { - UASSERT(m_state==POM_READY, "Ready->Moved on node not in proper state\n"); + UASSERT(m_state==POM_READY, "Ready->Moved on node not in proper state"); m_state = POM_MOVED; } OrderMoveDomScope* domScopep() const { return m_domScopep; } From 0eb1d0a84e51dc69eefe64c8f63eacd88980dd7d Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Thu, 14 Jun 2018 18:59:24 -0400 Subject: [PATCH 2/2] Fix cppcheck warnings. No functional change intended. --- include/verilated_vcd_c.cpp | 2 +- src/V3Case.cpp | 10 +++++----- src/V3Clock.cpp | 9 ++++++--- src/V3Combine.cpp | 1 + src/V3Coverage.cpp | 1 + src/V3Delayed.cpp | 3 ++- src/V3DepthBlock.cpp | 6 ++++-- src/V3EmitC.cpp | 4 ++-- src/V3Expand.cpp | 2 ++ src/V3Order.cpp | 2 +- src/V3Os.cpp | 6 +++--- src/V3Task.cpp | 2 ++ src/V3Trace.cpp | 2 ++ src/V3Unroll.cpp | 2 ++ 14 files changed, 34 insertions(+), 18 deletions(-) diff --git a/include/verilated_vcd_c.cpp b/include/verilated_vcd_c.cpp index 9f3f5c72e..ff5ea45cc 100644 --- a/include/verilated_vcd_c.cpp +++ b/include/verilated_vcd_c.cpp @@ -569,7 +569,7 @@ void VerilatedVcd::declare (vluint32_t code, const char* name, const char* wirep sprintf(buf, " %2d ", bits); decl += buf; if (m_evcd) { - sprintf(buf, "<%d", code); + sprintf(buf, "<%u", code); decl += buf; } else { decl += stringCode(code); diff --git a/src/V3Case.cpp b/src/V3Case.cpp index 97bb08f30..1417f6d1e 100644 --- a/src/V3Case.cpp +++ b/src/V3Case.cpp @@ -166,7 +166,7 @@ private: } UINFO(8,"Simple case statement: "<fileline(), iconstp->width()); numval.opBitsOne(iconstp->num()); uint32_t val = numval.toUInt(); - for (uint32_t i=0; i<(1UL<isDefault()) { // Case statement's default... Fill the table - for (uint32_t i=0; i<(1UL<v3warn(CASEINCOMPLETE,"Case values incompletely covered (example pattern 0x"<exprp()->unlinkFrBack(); if (debug()>=9) { - for (uint32_t i=0; i<(1UL<varp()->prettyName()); } } - AstVarScope* createVarSc(AstVarScope* oldvarscp, string name, int width/*0==fromoldvar*/, AstNodeDType* newdtypep) { + AstVarScope* createVarSc(AstVarScope* oldvarscp, const string& name, + int width/*0==fromoldvar*/, AstNodeDType* newdtypep) { // Because we've already scoped it, we may need to add both the AstVar and the AstVarScope if (!oldvarscp->scopep()) oldvarscp->v3fatalSrc("Var unscoped"); AstVar* varp; diff --git a/src/V3DepthBlock.cpp b/src/V3DepthBlock.cpp index 42792f250..a201bb3c9 100644 --- a/src/V3DepthBlock.cpp +++ b/src/V3DepthBlock.cpp @@ -126,8 +126,10 @@ private: public: // CONSTUCTORS explicit DepthBlockVisitor(AstNetlist* nodep) { - m_modp=NULL; - m_depth=0; + m_modp = NULL; + m_funcp = NULL; + m_depth = 0; + m_deepNum = 0; // nodep->accept(*this); } diff --git a/src/V3EmitC.cpp b/src/V3EmitC.cpp index 3a9f4c08e..7fd7b8c5d 100644 --- a/src/V3EmitC.cpp +++ b/src/V3EmitC.cpp @@ -993,7 +993,7 @@ class EmitCImp : EmitCStmts { // High level void emitImp(AstNodeModule* modp); void emitStaticDecl(AstNodeModule* modp); - void emitSettleLoop(std::string eval_call, bool initial); + void emitSettleLoop(const std::string& eval_call, bool initial); void emitWrapEval(AstNodeModule* modp); void emitInt(AstNodeModule* modp); void maybeSplit(AstNodeModule* modp); @@ -1752,7 +1752,7 @@ void EmitCImp::emitSensitives() { } } -void EmitCImp::emitSettleLoop(std::string eval_call, bool initial) { +void EmitCImp::emitSettleLoop(const std::string& eval_call, bool initial) { putsDecoration("// Evaluate till stable\n"); puts("int __VclockLoop = 0;\n"); puts("QData __Vchange = 1;\n"); diff --git a/src/V3Expand.cpp b/src/V3Expand.cpp index bff192936..d66e6157a 100644 --- a/src/V3Expand.cpp +++ b/src/V3Expand.cpp @@ -829,6 +829,8 @@ private: // Rather than doing a (slowish) ==##, we OR in the bits that aren't part of the mask eqp = new AstOr (nodep->fileline(), new AstConst (nodep->fileline(), notWideMask(nodep->lhsp())), + // Bug in cppcheck + // cppcheck-suppress memleak eqp); } newp = (newp==NULL) ? eqp : (new AstAnd (nodep->fileline(), newp, eqp)); diff --git a/src/V3Order.cpp b/src/V3Order.cpp index 6950277ca..723dd15dd 100644 --- a/src/V3Order.cpp +++ b/src/V3Order.cpp @@ -1612,7 +1612,7 @@ void OrderVisitor::process() { UINFO(2," Process Circulars...\n"); processCircular(); // must be before processDomains - // Assign logic verticesto new domains + // Assign logic vertices to new domains UINFO(2," Domains...\n"); processDomains(); m_graph.dumpDotFilePrefixed("orderg_domain"); diff --git a/src/V3Os.cpp b/src/V3Os.cpp index fb39cd98b..55c65201b 100644 --- a/src/V3Os.cpp +++ b/src/V3Os.cpp @@ -211,9 +211,9 @@ uint64_t V3Os::memUsageBytes() { if (!fp) { return 0; } - uint64_t size, resident, share, text, lib, data, dt; // All in pages - if (7 != fscanf(fp, "%" VL_PRI64 "d %" VL_PRI64 "d %" VL_PRI64 "d %" - VL_PRI64 "d %" VL_PRI64 "d %" VL_PRI64 "d %" VL_PRI64 "d", + vluint64_t size, resident, share, text, lib, data, dt; // All in pages + if (7 != fscanf(fp, "%" VL_PRI64 "u %" VL_PRI64 "u %" VL_PRI64 "u %" + VL_PRI64 "u %" VL_PRI64 "u %" VL_PRI64 "u %" VL_PRI64 "u", &size, &resident, &share, &text, &lib, &data, &dt)) { fclose(fp); return 0; diff --git a/src/V3Task.cpp b/src/V3Task.cpp index bd99f3133..9832b2d72 100644 --- a/src/V3Task.cpp +++ b/src/V3Task.cpp @@ -1258,7 +1258,9 @@ public: m_modp = NULL; m_topScopep = NULL; m_scopep = NULL; + m_insMode = IM_BEFORE; m_insStmtp = NULL; + m_modNCalls = 0; AstNode::user1ClearTree(); nodep->accept(*this); } diff --git a/src/V3Trace.cpp b/src/V3Trace.cpp index 5f3abdaf5..35714c3a5 100644 --- a/src/V3Trace.cpp +++ b/src/V3Trace.cpp @@ -700,6 +700,8 @@ public: m_chgSubFuncp = NULL; m_chgSubParentp = NULL; m_chgSubStmts = 0; + m_code = 0; + m_finding = false; m_funcNum = 0; nodep->accept(*this); } diff --git a/src/V3Unroll.cpp b/src/V3Unroll.cpp index 55ab2227f..bd7448a59 100644 --- a/src/V3Unroll.cpp +++ b/src/V3Unroll.cpp @@ -461,9 +461,11 @@ public: UnrollVisitor(AstNode* nodep, bool generate, const string& beginName) { m_forVarp = NULL; m_forVscp = NULL; + m_varValuep = NULL; m_ignoreIncp = NULL; m_varModeCheck = false; m_varModeReplace = false; + m_varAssignHit = false; m_generate = generate; m_beginName = beginName; //