Internals: Fix up include/ cppcheck issues (#6311)
This commit is contained in:
parent
d1f71f2342
commit
f71b8e6195
|
|
@ -392,7 +392,6 @@ install-msg:
|
|||
######################################################################
|
||||
# Format/Lint
|
||||
|
||||
# Use --xml flag to see the cppcheck code to use for suppression
|
||||
CPPCHECK1_CPP = $(wildcard $(srcdir)/include/*.cpp)
|
||||
CPPCHECK2_CPP = $(wildcard $(srcdir)/examples/*/*.cpp)
|
||||
CPPCHECK3_CPP = $(wildcard $(srcdir)/src/Vlc*.cpp)
|
||||
|
|
@ -422,8 +421,9 @@ CPPCHECK_INC += -I$(srcdir)/include/vltstd
|
|||
CPPCHECK_INC += -I$(srcdir)/src/obj_dbg
|
||||
CPPCHECK_INC += -I$(srcdir)/src
|
||||
|
||||
$(CPPCHECK_CACHE):
|
||||
mkdir -p $@
|
||||
$(CPPCHECK_CACHE): $(CHECK_CPP) $(CHECK_H) $(CHECK_YL)
|
||||
/bin/rm -rf $@
|
||||
/bin/mkdir -p $@
|
||||
|
||||
cppcheck: cppcheck-1 cppcheck-2 cppcheck-3 cppcheck-4 cppcheck-5 cppcheck-6 cppcheck-7 cppcheck-8
|
||||
cppcheck-1: | $(CPPCHECK_CACHE)
|
||||
|
|
|
|||
|
|
@ -627,11 +627,9 @@ WDataOutP VL_POW_WWW(int obits, int, int rbits, WDataOutP owp, const WDataInP lw
|
|||
VL_DEBUG_IFDEF(assert(owords <= VL_MULS_MAX_WORDS););
|
||||
owp[0] = 1;
|
||||
for (int i = 1; i < VL_WORDS_I(obits); ++i) owp[i] = 0;
|
||||
// cppcheck-has-bug-suppress variableScope
|
||||
VlWide<VL_MULS_MAX_WORDS> powstore; // Fixed size, as MSVC++ doesn't allow [words] here
|
||||
VlWide<VL_MULS_MAX_WORDS> lastpowstore; // Fixed size, as MSVC++ doesn't allow [words] here
|
||||
VlWide<VL_MULS_MAX_WORDS> lastoutstore; // Fixed size, as MSVC++ doesn't allow [words] here
|
||||
// cppcheck-has-bug-suppress variableScope
|
||||
VL_ASSIGN_W(obits, powstore, lwp);
|
||||
for (int bit = 0; bit < rbits; ++bit) {
|
||||
if (bit > 0) { // power = power*power
|
||||
|
|
@ -1384,7 +1382,6 @@ IData _vl_vsscanf(FILE* fp, // If a fscanf
|
|||
_vl_vsss_skipspace(fp, floc, fromp, fstr);
|
||||
_vl_vsss_read_str(fp, floc, fromp, fstr, t_tmp, "+-.0123456789eE");
|
||||
if (!t_tmp[0]) goto done;
|
||||
// cppcheck-has-bug-suppress unusedStructMember, unreadVariable
|
||||
union {
|
||||
double r;
|
||||
int64_t ld;
|
||||
|
|
@ -2151,7 +2148,6 @@ VlReadMem::VlReadMem(bool hex, int bits, const std::string& filename, QData star
|
|||
if (VL_UNLIKELY(!m_fp)) {
|
||||
// We don't report the Verilog source filename as it slow to have to pass it down
|
||||
VL_WARN_MT(filename.c_str(), 0, "", "$readmem file not found");
|
||||
// cppcheck-has-bug-suppress resourceLeak // m_fp is nullptr
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -2291,7 +2287,6 @@ VlWriteMem::VlWriteMem(bool hex, int bits, const std::string& filename, QData st
|
|||
m_fp = std::fopen(filename.c_str(), "w");
|
||||
if (VL_UNLIKELY(!m_fp)) {
|
||||
VL_FATAL_MT(filename.c_str(), 0, "", "$writemem file not found");
|
||||
// cppcheck-has-bug-suppress resourceLeak // m_fp is nullptr
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -2475,7 +2470,6 @@ static const char* vl_time_str(int scale) VL_PURE {
|
|||
double vl_time_multiplier(int scale) VL_PURE {
|
||||
// Return timescale multiplier -18 to +18
|
||||
// For speed, this does not check for illegal values
|
||||
// cppcheck-has-bug-suppress arrayIndexOutOfBoundsCond
|
||||
if (scale < 0) {
|
||||
static const double neg10[] = {1.0,
|
||||
0.1,
|
||||
|
|
@ -2496,7 +2490,6 @@ double vl_time_multiplier(int scale) VL_PURE {
|
|||
0.0000000000000001,
|
||||
0.00000000000000001,
|
||||
0.000000000000000001};
|
||||
// cppcheck-has-bug-suppress arrayIndexOutOfBoundsCond
|
||||
return neg10[-scale];
|
||||
} else {
|
||||
static const double pow10[] = {1.0,
|
||||
|
|
@ -2518,7 +2511,6 @@ double vl_time_multiplier(int scale) VL_PURE {
|
|||
10000000000000000.0,
|
||||
100000000000000000.0,
|
||||
1000000000000000000.0};
|
||||
// cppcheck-has-bug-suppress arrayIndexOutOfBoundsCond
|
||||
return pow10[scale];
|
||||
}
|
||||
}
|
||||
|
|
@ -2814,7 +2806,7 @@ void VerilatedContext::internalsDump() const VL_MT_SAFE {
|
|||
VerilatedImp::userDump();
|
||||
}
|
||||
|
||||
void VerilatedContext::addModel(VerilatedModel* modelp) {
|
||||
void VerilatedContext::addModel(const VerilatedModel* modelp) {
|
||||
if (!quiet()) {
|
||||
// CPU time isn't read as starting point until model creation, so that quiet() is set
|
||||
// Thus if quiet(), avoids slow OS read affecting some usages that make many models
|
||||
|
|
@ -2852,7 +2844,7 @@ VerilatedVirtualBase* VerilatedContext::threadPoolp() {
|
|||
void VerilatedContext::prepareClone() { delete m_threadPool.release(); }
|
||||
|
||||
VerilatedVirtualBase* VerilatedContext::threadPoolpOnClone() {
|
||||
if (VL_UNLIKELY(m_threadPool)) m_threadPool.release();
|
||||
if (VL_UNLIKELY(m_threadPool)) (void)m_threadPool.release();
|
||||
m_threadPool = std::unique_ptr<VlThreadPool>(new VlThreadPool{this, m_threads - 1});
|
||||
return m_threadPool.get();
|
||||
}
|
||||
|
|
@ -3133,7 +3125,7 @@ void VerilatedContext::trace(VerilatedTraceBaseC* tfp, int levels, int options)
|
|||
VL_FATAL_MT("", 0, "",
|
||||
"Testbench C call to 'VerilatedContext::trace()' requires model(s) Verilated"
|
||||
" with --trace-fst or --trace-vcd option");
|
||||
for (auto& cbr : m_ns.m_traceBaseModelCbs) cbr(tfp, levels, options);
|
||||
for (const auto& cbr : m_ns.m_traceBaseModelCbs) cbr(tfp, levels, options);
|
||||
}
|
||||
void VerilatedContext::traceBaseModelCbAdd(traceBaseModelCb_t cb) VL_MT_SAFE {
|
||||
// Model creation registering a callback for when Verilated::trace() called
|
||||
|
|
@ -3148,7 +3140,6 @@ VerilatedSyms::VerilatedSyms(VerilatedContext* contextp)
|
|||
: _vm_contextp__(contextp ? contextp : Verilated::threadContextp()) {
|
||||
VerilatedContext::checkMagic(_vm_contextp__);
|
||||
Verilated::threadContextp(_vm_contextp__);
|
||||
// cppcheck-has-bug-suppress noCopyConstructor
|
||||
__Vm_evalMsgQp = new VerilatedEvalMsgQueue;
|
||||
}
|
||||
|
||||
|
|
@ -3550,16 +3541,16 @@ void VerilatedScope::scopeDump() const {
|
|||
VerilatedImp::exportName(i));
|
||||
}
|
||||
}
|
||||
if (const VerilatedVarNameMap* const varsp = this->varsp()) {
|
||||
for (const auto& i : *varsp) VL_PRINTF_MT(" VAR %p: %s\n", &(i.second), i.first);
|
||||
if (const VerilatedVarNameMap* const ivarsp = this->varsp()) {
|
||||
for (const auto& i : *ivarsp) VL_PRINTF_MT(" VAR %p: %s\n", &(i.second), i.first);
|
||||
}
|
||||
}
|
||||
|
||||
void VerilatedHierarchy::add(VerilatedScope* fromp, VerilatedScope* top) {
|
||||
void VerilatedHierarchy::add(const VerilatedScope* fromp, const VerilatedScope* top) {
|
||||
VerilatedImp::hierarchyAdd(fromp, top);
|
||||
}
|
||||
|
||||
void VerilatedHierarchy::remove(VerilatedScope* fromp, VerilatedScope* top) {
|
||||
void VerilatedHierarchy::remove(const VerilatedScope* fromp, const VerilatedScope* top) {
|
||||
VerilatedImp::hierarchyRemove(fromp, top);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -644,7 +644,7 @@ public:
|
|||
}
|
||||
|
||||
// Internal: Model and thread setup
|
||||
void addModel(VerilatedModel*);
|
||||
void addModel(const VerilatedModel* modelp);
|
||||
VerilatedVirtualBase* threadPoolp();
|
||||
void prepareClone();
|
||||
VerilatedVirtualBase* threadPoolpOnClone();
|
||||
|
|
@ -763,8 +763,8 @@ public: // But internals only - called from VerilatedModule's
|
|||
|
||||
class VerilatedHierarchy final {
|
||||
public:
|
||||
static void add(VerilatedScope* fromp, VerilatedScope* top);
|
||||
static void remove(VerilatedScope* fromp, VerilatedScope* top);
|
||||
static void add(const VerilatedScope* fromp, const VerilatedScope* top);
|
||||
static void remove(const VerilatedScope* fromp, const VerilatedScope* top);
|
||||
};
|
||||
|
||||
//===========================================================================
|
||||
|
|
|
|||
|
|
@ -255,17 +255,21 @@ private:
|
|||
|
||||
public:
|
||||
// PUBLIC METHODS
|
||||
// cppcheck-suppress dupInheritedMember
|
||||
std::string defaultFilename() VL_MT_SAFE { return m_contextp->coverageFilename(); }
|
||||
// cppcheck-suppress dupInheritedMember
|
||||
void forcePerInstance(const bool flag) VL_MT_SAFE_EXCLUDES(m_mutex) {
|
||||
Verilated::quiesce();
|
||||
const VerilatedLockGuard lock{m_mutex};
|
||||
m_forcePerInstance = flag;
|
||||
}
|
||||
// cppcheck-suppress dupInheritedMember
|
||||
void clear() VL_MT_SAFE_EXCLUDES(m_mutex) {
|
||||
Verilated::quiesce();
|
||||
const VerilatedLockGuard lock{m_mutex};
|
||||
clearGuts();
|
||||
}
|
||||
// cppcheck-suppress dupInheritedMember
|
||||
void clearNonMatch(const char* const matchp) VL_MT_SAFE_EXCLUDES(m_mutex) {
|
||||
Verilated::quiesce();
|
||||
const VerilatedLockGuard lock{m_mutex};
|
||||
|
|
@ -281,10 +285,11 @@ public:
|
|||
m_items = newlist;
|
||||
}
|
||||
}
|
||||
// cppcheck-suppress dupInheritedMember
|
||||
void zero() VL_MT_SAFE_EXCLUDES(m_mutex) {
|
||||
Verilated::quiesce();
|
||||
const VerilatedLockGuard lock{m_mutex};
|
||||
for (const auto& itemp : m_items) itemp->zero();
|
||||
for (const VerilatedCovImpItem* const itemp : m_items) itemp->zero();
|
||||
}
|
||||
|
||||
// We assume there's always call to i/f/p in that order
|
||||
|
|
@ -307,6 +312,7 @@ public:
|
|||
valps[0] = m_insertFilenamep;
|
||||
const std::string linestr = std::to_string(m_insertLineno);
|
||||
ckeyps[1] = "lineno";
|
||||
// cppcheck-suppress autoVariables // Used only below for insert
|
||||
valps[1] = linestr.c_str();
|
||||
// Default page if not specified
|
||||
const char* fnstartp = m_insertFilenamep;
|
||||
|
|
@ -316,6 +322,7 @@ public:
|
|||
const size_t page_len = fnendp - fnstartp;
|
||||
const std::string page_default = "sp_user/" + std::string{fnstartp, page_len};
|
||||
ckeyps[2] = "page";
|
||||
// cppcheck-suppress autoVariables // Used only below for insert
|
||||
valps[2] = page_default.c_str();
|
||||
|
||||
// Keys -> strings
|
||||
|
|
@ -357,6 +364,7 @@ public:
|
|||
m_insertp = nullptr;
|
||||
}
|
||||
|
||||
// cppcheck-suppress dupInheritedMember
|
||||
void write(const std::string& filename) VL_MT_SAFE_EXCLUDES(m_mutex) {
|
||||
Verilated::quiesce();
|
||||
const VerilatedLockGuard lock{m_mutex};
|
||||
|
|
|
|||
|
|
@ -290,7 +290,7 @@ static void _vl_svGetBitArrElemVecVal(svBitVecVal* d, const svOpenArrayHandle s,
|
|||
break;
|
||||
}
|
||||
case VLVT_WDATA: {
|
||||
WDataOutP wdatap = (reinterpret_cast<WDataOutP>(datap));
|
||||
WDataInP wdatap = (reinterpret_cast<WDataInP>(datap));
|
||||
for (int i = 0; i < VL_WORDS_I(varp->entBits()); ++i) d[i] = wdatap[i];
|
||||
return;
|
||||
}
|
||||
|
|
@ -329,7 +329,7 @@ static void _vl_svGetLogicArrElemVecVal(svLogicVecVal* d, const svOpenArrayHandl
|
|||
break;
|
||||
}
|
||||
case VLVT_WDATA: {
|
||||
WDataOutP wdatap = (reinterpret_cast<WDataOutP>(datap));
|
||||
WDataInP wdatap = (reinterpret_cast<WDataInP>(datap));
|
||||
for (int i = 0; i < VL_WORDS_I(varp->entBits()); ++i) {
|
||||
d[i].aval = wdatap[i];
|
||||
d[i].bval = 0;
|
||||
|
|
|
|||
|
|
@ -297,7 +297,7 @@ VerilatedFst::Buffer* VerilatedFst::getTraceBuffer(uint32_t fidx) {
|
|||
|
||||
void VerilatedFst::commitTraceBuffer(VerilatedFst::Buffer* bufp) {
|
||||
if (offload()) {
|
||||
OffloadBuffer* const offloadBufferp = static_cast<OffloadBuffer*>(bufp);
|
||||
const OffloadBuffer* const offloadBufferp = static_cast<const OffloadBuffer*>(bufp);
|
||||
if (offloadBufferp->m_offloadBufferWritep) {
|
||||
m_offloadBufferWritep = offloadBufferp->m_offloadBufferWritep;
|
||||
return; // Buffer will be deleted by the offload thread
|
||||
|
|
|
|||
|
|
@ -652,7 +652,7 @@ static inline IData VL_REDAND_IW(int lbits, WDataInP const lwp) VL_PURE {
|
|||
EData combine = lwp[0];
|
||||
for (int i = 1; i < words - 1; ++i) combine &= lwp[i];
|
||||
combine &= ~VL_MASK_E(lbits) | lwp[words - 1];
|
||||
// cppcheck-has-bug-suppress knownConditionTrueFalse
|
||||
// cppcheck-suppress knownConditionTrueFalse
|
||||
return ((~combine) == 0);
|
||||
}
|
||||
|
||||
|
|
@ -1094,14 +1094,12 @@ static inline WDataOutP VL_MULS_WWW(int lbits, WDataOutP owp, WDataInP const lwp
|
|||
if (lneg) { // Negate lhs
|
||||
lwusp = lwstore;
|
||||
VL_NEGATE_W(words, lwstore, lwp);
|
||||
// cppcheck-has-bug-suppress unreadVariable
|
||||
lwstore[words - 1] &= VL_MASK_E(lbits); // Clean it
|
||||
}
|
||||
const EData rneg = VL_SIGN_E(lbits, rwp[words - 1]);
|
||||
if (rneg) { // Negate rhs
|
||||
rwusp = rwstore;
|
||||
VL_NEGATE_W(words, rwstore, rwp);
|
||||
// cppcheck-has-bug-suppress unreadVariable
|
||||
rwstore[words - 1] &= VL_MASK_E(lbits); // Clean it
|
||||
}
|
||||
VL_MUL_W(words, owp, lwusp, rwusp);
|
||||
|
|
@ -2760,6 +2758,7 @@ static inline void VL_SELASSIGN_WW(int rbits, int obits, WDataOutP iowp, WDataIn
|
|||
const int w = obits < upperbits ? obits : upperbits;
|
||||
const int insmask = VL_MASK_E(w);
|
||||
iowp[0] = (iowp[0] & ~insmask) | ((rwp[wordoff] >> lsb) & insmask);
|
||||
// cppcheck-suppress knownConditionTrueFalse
|
||||
if (w == obits) return;
|
||||
obits -= w;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -363,7 +363,7 @@ private:
|
|||
VerilatedFpList fdToFpList(IData fdi) VL_REQUIRES(m_fdMutex) {
|
||||
VerilatedFpList fp;
|
||||
// cppverilator-suppress integerOverflow shiftTooManyBitsSigned
|
||||
if ((fdi & (1 << 31)) != 0) {
|
||||
if (VL_BITISSET_I(fdi, 31)) {
|
||||
// Non-MCD case
|
||||
const IData idx = fdi & VL_MASK_I(31);
|
||||
switch (idx) {
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ void VlExecutionProfiler::dump(const char* filenamep, uint64_t tickEnd)
|
|||
fprintf(fp, "VLPROF arg +verilator+prof+exec+window+%u\n",
|
||||
Verilated::threadContextp()->profExecWindow());
|
||||
std::string numa = "no threads";
|
||||
if (VlThreadPool* const threadPoolp
|
||||
if (const VlThreadPool* const threadPoolp
|
||||
= static_cast<VlThreadPool*>(Verilated::threadContextp()->threadPoolp())) {
|
||||
numa = threadPoolp->numaStatus();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -455,8 +455,8 @@ bool VlRandomizer::parseSolution(std::iostream& f) {
|
|||
const auto it = m_vars.find(name);
|
||||
if (it == m_vars.end()) continue;
|
||||
const VlRandomVar& varr = *it->second;
|
||||
if (m_randmode && !varr.randModeIdxNone()) {
|
||||
if (!(m_randmode->at(varr.randModeIdx()))) continue;
|
||||
if (m_randmodep && !varr.randModeIdxNone()) {
|
||||
if (!m_randmodep->at(varr.randModeIdx())) continue;
|
||||
}
|
||||
if (!indices.empty()) {
|
||||
std::ostringstream oss;
|
||||
|
|
|
|||
|
|
@ -200,7 +200,7 @@ class VlRandomizer final {
|
|||
std::map<std::string, std::shared_ptr<const VlRandomVar>> m_vars; // Solver-dependent
|
||||
// variables
|
||||
ArrayInfoMap m_arr_vars; // Tracks each element in array structures for iteration
|
||||
const VlQueue<CData>* m_randmode; // rand_mode state;
|
||||
const VlQueue<CData>* m_randmodep = nullptr; // rand_mode state;
|
||||
int m_index = 0; // Internal counter for key generation
|
||||
|
||||
// PRIVATE METHODS
|
||||
|
|
@ -574,7 +574,7 @@ public:
|
|||
|
||||
void hard(std::string&& constraint);
|
||||
void clear();
|
||||
void set_randmode(const VlQueue<CData>& randmode) { m_randmode = &randmode; }
|
||||
void set_randmode(const VlQueue<CData>& randmode) { m_randmodep = &randmode; }
|
||||
#ifdef VL_DEBUG
|
||||
void dump() const;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ void VerilatedRestore::fill() VL_MT_UNSAFE_ONE {
|
|||
if (VL_UNLIKELY(!isOpen())) return;
|
||||
// Move remaining characters down to start of buffer. (No memcpy, overlaps allowed)
|
||||
uint8_t* rp = m_bufp;
|
||||
for (uint8_t* sp = m_cp; sp < m_endp; *rp++ = *sp++) {} // Overlaps
|
||||
for (const uint8_t* sp = m_cp; sp < m_endp; *rp++ = *sp++) {} // Overlaps
|
||||
m_endp = m_bufp + (m_endp - m_cp);
|
||||
m_cp = m_bufp; // Reset buffer
|
||||
// Read into buffer starting at m_endp
|
||||
|
|
|
|||
|
|
@ -47,8 +47,10 @@ protected:
|
|||
std::string m_filename; // Filename, for error messages
|
||||
VerilatedAssertOneThread m_assertOne; // Assert only called from single thread
|
||||
|
||||
static constexpr size_t bufferSize() { return 256 * 1024; } // See below for slack calculation
|
||||
static constexpr size_t bufferInsertSize() { return 16 * 1024; }
|
||||
static constexpr size_t bufferSize() {
|
||||
return 256 * 1024L;
|
||||
} // See below for slack calculation
|
||||
static constexpr size_t bufferInsertSize() { return 16 * 1024L; }
|
||||
|
||||
void header() VL_MT_UNSAFE_ONE;
|
||||
void trailer() VL_MT_UNSAFE_ONE;
|
||||
|
|
@ -119,8 +121,10 @@ protected:
|
|||
std::string m_filename; // Filename, for error messages
|
||||
VerilatedAssertOneThread m_assertOne; // Assert only called from single thread
|
||||
|
||||
static constexpr size_t bufferSize() { return 256 * 1024; } // See below for slack calculation
|
||||
static constexpr size_t bufferInsertSize() { return 16 * 1024; }
|
||||
static constexpr size_t bufferSize() {
|
||||
return 256 * 1024L;
|
||||
} // See below for slack calculation
|
||||
static constexpr size_t bufferInsertSize() { return 16 * 1024L; }
|
||||
|
||||
virtual void fill() = 0;
|
||||
void header() VL_MT_UNSAFE_ONE;
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ void VlDelayScheduler::dump() const {
|
|||
VL_DBG_MSGF(" No delayed processes:\n");
|
||||
} else {
|
||||
VL_DBG_MSGF(" Delayed processes:\n");
|
||||
for (auto& susp : m_zeroDelayed) {
|
||||
for (const auto& susp : m_zeroDelayed) {
|
||||
VL_DBG_MSGF(" Awaiting #0-delayed resumption, "
|
||||
"time () %" PRIu64 ": ",
|
||||
m_context.time());
|
||||
|
|
|
|||
|
|
@ -499,7 +499,7 @@ private:
|
|||
|
||||
public:
|
||||
// CONSTRUCTORS
|
||||
// m_defaultValue isn't defaulted. Caller's constructor must do it.
|
||||
// cppcheck-suppress uninitMember // m_defaultValue isn't defaulted, caller's constructor must
|
||||
VlQueue() = default;
|
||||
~VlQueue() = default;
|
||||
VlQueue(const VlQueue&) = default;
|
||||
|
|
|
|||
|
|
@ -490,6 +490,7 @@ VerilatedVcd::Buffer* VerilatedVcd::getTraceBuffer(uint32_t fidx) {
|
|||
// Note: This is called from VerilatedVcd::dump, which already holds the lock
|
||||
// If no buffer available, allocate a new one
|
||||
if (m_freeBuffers.empty()) {
|
||||
// cppcheck-suppress unreadVariable // cppcheck bug, used below
|
||||
constexpr size_t pageSize = 4096;
|
||||
// 4 * m_maxSignalBytes, so we can reserve 2 * m_maxSignalBytes at the end for safety
|
||||
size_t startingSize = roundUpToMultipleOf<pageSize>(4 * m_maxSignalBytes);
|
||||
|
|
|
|||
|
|
@ -114,6 +114,7 @@ public:
|
|||
#endif
|
||||
}
|
||||
// MEMBERS
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpio* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpio*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -144,6 +145,7 @@ public:
|
|||
, m_time{time}
|
||||
, m_reason{reason} {}
|
||||
~VerilatedVpioReasonCb() override = default;
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioReasonCb* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioReasonCb*>(reinterpret_cast<VerilatedVpioReasonCb*>(h));
|
||||
}
|
||||
|
|
@ -158,6 +160,7 @@ public:
|
|||
explicit VerilatedVpioConst(int32_t num)
|
||||
: m_num{num} {}
|
||||
~VerilatedVpioConst() override = default;
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioConst* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioConst*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -187,6 +190,7 @@ public:
|
|||
m_indexedDim = varp->m_indexedDim;
|
||||
}
|
||||
}
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioVarBase* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioVarBase*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -258,6 +262,7 @@ public:
|
|||
: VerilatedVpioVarBase{varp, scopep} {}
|
||||
~VerilatedVpioParam() override = default;
|
||||
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioParam* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioParam*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -283,6 +288,7 @@ public:
|
|||
explicit VerilatedVpioRange(const VerilatedRange* rangep)
|
||||
: m_rangep{rangep} {}
|
||||
~VerilatedVpioRange() override = default;
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioRange* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioRange*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -301,6 +307,7 @@ public:
|
|||
m_iter = m_ranges.begin();
|
||||
}
|
||||
~VerilatedVpioRangeIter() override = default;
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioRangeIter* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioRangeIter*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -333,6 +340,7 @@ public:
|
|||
m_defname = m_scopep->defname();
|
||||
}
|
||||
~VerilatedVpioScope() override = default;
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioScope* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioScope*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -379,6 +387,7 @@ public:
|
|||
~VerilatedVpioVar() override {
|
||||
if (m_prevDatap) VL_DO_CLEAR(delete[] m_prevDatap, m_prevDatap = nullptr);
|
||||
}
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioVar* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioVar*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -450,6 +459,7 @@ public:
|
|||
m_topscopep = Verilated::threadContextp()->scopeFind("TOP");
|
||||
}
|
||||
~VerilatedVpioVarIter() override = default;
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioVarIter* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioVarIter*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -508,6 +518,7 @@ public:
|
|||
for (auto it : m_ranges) m_nextIndex.push_back(it.right());
|
||||
}
|
||||
~VerilatedVpioRegIter() override = default;
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioRegIter* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioRegIter*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -562,6 +573,7 @@ public:
|
|||
}
|
||||
if (VL_UNLIKELY(pos == std::string::npos)) m_toplevel = true;
|
||||
}
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioModule* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioModule*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -578,6 +590,7 @@ public:
|
|||
m_it = m_vec->begin();
|
||||
}
|
||||
~VerilatedVpioModuleIter() override = default;
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioModuleIter* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioModuleIter*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -607,6 +620,7 @@ public:
|
|||
m_it = m_vec->begin();
|
||||
}
|
||||
~VerilatedVpioScopeIter() override = default;
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioScopeIter* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioScopeIter*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -640,6 +654,7 @@ public:
|
|||
|
||||
if (strcmp(m_name, "\\$unit ") == 0) m_name = d_unit;
|
||||
}
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioPackage* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioPackage*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -657,6 +672,7 @@ public:
|
|||
m_it = m_vec->begin();
|
||||
}
|
||||
~VerilatedVpioInstanceIter() override = default;
|
||||
// cppcheck-suppress duplInheritedMember
|
||||
static VerilatedVpioInstanceIter* castp(vpiHandle h) {
|
||||
return dynamic_cast<VerilatedVpioInstanceIter*>(reinterpret_cast<VerilatedVpio*>(h));
|
||||
}
|
||||
|
|
@ -1041,7 +1057,7 @@ public:
|
|||
}
|
||||
if (was_last) break;
|
||||
}
|
||||
for (const auto& ip : update) {
|
||||
for (const VerilatedVpioVar* const ip : update) {
|
||||
std::memcpy(ip->prevDatap(), ip->varDatap(), ip->entSize());
|
||||
}
|
||||
return called;
|
||||
|
|
@ -2540,7 +2556,7 @@ void vl_vpi_put_word_gen(const VerilatedVpioVar* vop, T word, size_t bitCount, s
|
|||
= (info.m_datap[info.m_wordOffset + 1] & ~info.m_maskHi)
|
||||
| ((word >> (wordBits - info.m_bitOffset)) & info.m_maskHi);
|
||||
}
|
||||
// cppcheck-has-bug-suppress unreadVariable
|
||||
// cppcheck-suppress unreadVariable
|
||||
info.m_datap[info.m_wordOffset] = (info.m_datap[info.m_wordOffset] & ~info.m_maskLo)
|
||||
| ((word << info.m_bitOffset) & info.m_maskLo);
|
||||
}
|
||||
|
|
@ -3589,12 +3605,14 @@ PLI_INT32 vpi_printf(PLI_BYTE8* formatp, ...) {
|
|||
return chars;
|
||||
}
|
||||
|
||||
// cppcheck-suppress constParameterPointer
|
||||
PLI_INT32 vpi_vprintf(PLI_BYTE8* formatp, va_list ap) {
|
||||
VerilatedVpiImp::assertOneCheck();
|
||||
VL_VPI_ERROR_RESET_();
|
||||
return VL_VPRINTF(formatp, ap);
|
||||
}
|
||||
|
||||
// cppcheck-suppress constParameterPointer
|
||||
PLI_INT32 vpi_mcd_vprintf(PLI_UINT32 mcd, PLI_BYTE8* format, va_list ap) {
|
||||
VerilatedVpiImp::assertOneCheck();
|
||||
FILE* const fp = VL_CVT_I_FP(mcd);
|
||||
|
|
@ -3631,10 +3649,10 @@ PLI_INT32 vpi_chk_error(p_vpi_error_info error_info_p) {
|
|||
// executing vpi_chk_error does not reset error
|
||||
// error_info_p can be nullptr, so only return level in that case
|
||||
VerilatedVpiImp::assertOneCheck();
|
||||
p_vpi_error_info const _error_info_p = VerilatedVpiImp::error_info()->getError();
|
||||
if (error_info_p && _error_info_p) *error_info_p = *_error_info_p;
|
||||
if (!_error_info_p) return 0; // no error occurred
|
||||
return _error_info_p->level; // return error severity level
|
||||
const p_vpi_error_info imp_info_p = VerilatedVpiImp::error_info()->getError();
|
||||
if (error_info_p && imp_info_p) *error_info_p = *imp_info_p;
|
||||
if (!imp_info_p) return 0; // no error occurred
|
||||
return imp_info_p->level; // return error severity level
|
||||
}
|
||||
|
||||
#ifndef VL_NO_LEGACY
|
||||
|
|
|
|||
Loading…
Reference in New Issue