From 1c5c9e24354c3519fb970aff0c27c2f537e73d8e Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Tue, 12 Jun 2018 21:14:20 -0400 Subject: [PATCH] cppcheck fixes --- include/verilated.cpp | 10 ++++++++-- include/verilated_vpi.cpp | 5 +++-- include/verilatedos.h | 2 +- src/V3Ast.h | 2 +- src/V3AstNodes.h | 2 +- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/include/verilated.cpp b/include/verilated.cpp index ef0c7620c..5fb8d1e82 100644 --- a/include/verilated.cpp +++ b/include/verilated.cpp @@ -122,10 +122,16 @@ std::string _vl_string_vprintf(const char* formatp, va_list ap) VL_MT_SAFE { va_list aq; va_copy(aq, ap); int len = VL_VSNPRINTF(NULL, 0, formatp, aq); - if (VL_UNLIKELY(len < 1)) return ""; + va_end(aq); + if (VL_UNLIKELY(len < 1)) { + va_end(ap); + return ""; + } char* bufp = new char[len+1]; VL_VSNPRINTF(bufp, len+1, formatp, ap); + va_end(ap); + std::string out = std::string(bufp, len); delete[] bufp; return out; @@ -163,7 +169,7 @@ void VL_DBG_MSGF(const char* formatp, ...) VL_MT_SAFE { // Using VL_PRINTF not VL_PRINTF_MT so that we can call VL_DBG_MSGF // from within the guts of the thread execution machinery (and it goes // to the screen and not into the queues we're debugging) - VL_PRINTF("-V{t%d,%" VL_PRI64 "d}%s", VL_THREAD_ID(), _vl_dbg_sequence_number(), out.c_str()); + VL_PRINTF("-V{t%d,%" VL_PRI64 "u}%s", VL_THREAD_ID(), _vl_dbg_sequence_number(), out.c_str()); } #ifdef VL_THREADED diff --git a/include/verilated_vpi.cpp b/include/verilated_vpi.cpp index c57bcad13..63faa7ecd 100644 --- a/include/verilated_vpi.cpp +++ b/include/verilated_vpi.cpp @@ -473,11 +473,12 @@ public: m_errorInfo.level = level; return this; } - void setMessage(std::string file, PLI_INT32 line, const std::string& message, ...) { + void setMessage(std::string file, PLI_INT32 line, const char* message, ...) { + // message cannot be a const string& as va_start cannot use a reference static VL_THREAD_LOCAL std::string filehold; va_list args; va_start(args, message); - VL_VSNPRINTF(m_buff, sizeof(m_buff), message.c_str(), args); + VL_VSNPRINTF(m_buff, sizeof(m_buff), message, args); va_end(args); m_errorInfo.state = vpiPLI; filehold = file; diff --git a/include/verilatedos.h b/include/verilatedos.h index 5e9039b00..e27402666 100644 --- a/include/verilatedos.h +++ b/include/verilatedos.h @@ -387,7 +387,7 @@ typedef unsigned long long vluint64_t; ///< 64-bit unsigned type # define VL_CPU_RELAX() asm volatile("yield" ::: "memory") # elif defined(__powerpc64__) # define VL_CPU_RELAX() asm volatile("or 1, 1, 1; or 2, 2, 2;" ::: "memory") -# elif +# else # error "Missing VL_CPU_RELAX() definition. Or, don't use VL_THREADED" # endif #endif diff --git a/src/V3Ast.h b/src/V3Ast.h index 05b5b1b8f..99834f529 100644 --- a/src/V3Ast.h +++ b/src/V3Ast.h @@ -2069,7 +2069,7 @@ public: class AstNodeRange : public AstNode { // A range, sized or unsized public: - AstNodeRange(FileLine* fl) : AstNode (fl) { } + explicit AstNodeRange(FileLine* fl) : AstNode (fl) { } ASTNODE_BASE_FUNCS(NodeRange) }; diff --git a/src/V3AstNodes.h b/src/V3AstNodes.h index 7c1617bad..ce562eb82 100644 --- a/src/V3AstNodes.h +++ b/src/V3AstNodes.h @@ -149,7 +149,7 @@ public: class AstUnsizedRange : public AstNodeRange { // Unsized range specification, for open arrays public: - AstUnsizedRange(FileLine* fl) : AstNodeRange(fl) { } + explicit AstUnsizedRange(FileLine* fl) : AstNodeRange(fl) { } ASTNODE_NODE_FUNCS(UnsizedRange) virtual string emitC() { V3ERROR_NA; return ""; } virtual string emitVerilog() { return "[]"; }