diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index 8c7a4bc59b5..84a0b77bf0a 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -204,7 +204,7 @@ maketree: $(sort $(OBJDIRS)) .PHONY: clang clang-5 mingw doc clang: - $(MAKE) CC=clang++ LD=clang++ CEXTRAFLAGS="-march=native -Weverything -Werror -override -Wno-unreachable-code -Wno-padded -Wno-weak-vtables -Wno-missing-variable-declarations -Wconversion -Wno-c++98-compat -Wno-float-equal -Wno-global-constructors -Wno-c++98-compat-pedantic -Wno-format-nonliteral -Wno-weak-template-vtables -Wno-exit-time-destructors" + $(MAKE) CC=clang++ LD=clang++ CEXTRAFLAGS="-march=native -Weverything -Werror -override -Wno-unreachable-code -Wno-padded -Wno-weak-vtables -Wno-missing-variable-declarations -Wconversion -Wno-c++98-compat -Wno-float-equal -Wno-global-constructors -Wno-c++98-compat-pedantic -Wno-format-nonliteral -Wweak-template-vtables -Wno-exit-time-destructors" clang-5: $(MAKE) CC=clang++-5.0 LD=clang++-5.0 CEXTRAFLAGS="-march=native -Weverything -Werror -Wno-inconsistent-missing-destructor-override -Wno-unreachable-code -Wno-padded -Wno-weak-vtables -Wno-missing-variable-declarations -Wconversion -Wno-c++98-compat -Wno-float-equal -Wno-global-constructors -Wno-c++98-compat-pedantic -Wno-format-nonliteral -Wno-weak-template-vtables -Wno-exit-time-destructors" diff --git a/src/lib/netlist/devices/nld_7483.cpp b/src/lib/netlist/devices/nld_7483.cpp index e3c31a691ae..395840b2549 100644 --- a/src/lib/netlist/devices/nld_7483.cpp +++ b/src/lib/netlist/devices/nld_7483.cpp @@ -95,19 +95,19 @@ namespace netlist NETLIB_HANDLER(7483, upd_a) { - m_a = (m_A1() << 0) | (m_A2() << 1) | (m_A3() << 2) | (m_A4() << 3); + m_a = static_cast((m_A1() << 0) | (m_A2() << 1) | (m_A3() << 2) | (m_A4() << 3)); NETLIB_NAME(7483)::update(); } NETLIB_HANDLER(7483, upd_b) { - m_b = (m_B1() << 0) | (m_B2() << 1) | (m_B3() << 2) | (m_B4() << 3); + m_b = static_cast((m_B1() << 0) | (m_B2() << 1) | (m_B3() << 2) | (m_B4() << 3)); NETLIB_NAME(7483)::update(); } inline NETLIB_UPDATE(7483) { - uint8_t r = m_a + m_b + m_C0(); + uint8_t r = static_cast(m_a + m_b + m_C0()); if (r != m_lastr) { diff --git a/src/lib/netlist/devices/nld_7490.cpp b/src/lib/netlist/devices/nld_7490.cpp index efec051f440..ccd839d83e9 100644 --- a/src/lib/netlist/devices/nld_7490.cpp +++ b/src/lib/netlist/devices/nld_7490.cpp @@ -83,7 +83,8 @@ namespace netlist NLTIME_FROM_NS(18), NLTIME_FROM_NS(36) - NLTIME_FROM_NS(18), NLTIME_FROM_NS(54) - NLTIME_FROM_NS(18), - NLTIME_FROM_NS(72) - NLTIME_FROM_NS(18)}; + NLTIME_FROM_NS(72) - NLTIME_FROM_NS(18) + }; NETLIB_UPDATE(7490) { diff --git a/src/lib/netlist/devices/nld_7497.cpp b/src/lib/netlist/devices/nld_7497.cpp index 12e77239d61..9b515c1a8eb 100644 --- a/src/lib/netlist/devices/nld_7497.cpp +++ b/src/lib/netlist/devices/nld_7497.cpp @@ -74,9 +74,9 @@ namespace netlist m_Y.push(y, out_delay_CLK_Y[y]); } - int rate() + uint8_t rate() { - int a = 0; + uint8_t a = 0; for (std::size_t i = 0; i < 6; i++) a |= (m_B[i]() << i); diff --git a/src/lib/netlist/devices/nld_82S16.cpp b/src/lib/netlist/devices/nld_82S16.cpp index fa9ac7b03c7..52385cf7e5b 100644 --- a/src/lib/netlist/devices/nld_82S16.cpp +++ b/src/lib/netlist/devices/nld_82S16.cpp @@ -49,14 +49,14 @@ namespace netlist { // FIXME: Outputs are tristate. This needs to be properly implemented m_DOUTQ.push(1, NLTIME_FROM_NS(20)); - for (int i=0; i<8; i++) + for (std::size_t i=0; i<8; i++) m_A[i].inactivate(); m_WEQ.inactivate(); m_DIN.inactivate(); } else if (last && !m_enq) { - for (int i=0; i<8; i++) + for (std::size_t i=0; i<8; i++) m_A[i].activate(); m_WEQ.activate(); m_DIN.activate(); diff --git a/src/lib/netlist/devices/nld_9316.cpp b/src/lib/netlist/devices/nld_9316.cpp index 972a575cd03..7b1be9aa48d 100644 --- a/src/lib/netlist/devices/nld_9316.cpp +++ b/src/lib/netlist/devices/nld_9316.cpp @@ -40,7 +40,7 @@ namespace netlist NETLIB_HANDLERI(clk); NETLIB_HANDLERI(abcd) { - m_abcd = (m_D() << 3) | (m_C() << 2) | (m_B() << 1) | (m_A() << 0); + m_abcd = static_cast((m_D() << 3) | (m_C() << 2) | (m_B() << 1) | (m_A() << 0)); } logic_input_t m_CLK; diff --git a/src/lib/netlist/devices/nlid_truthtable.cpp b/src/lib/netlist/devices/nlid_truthtable.cpp index 88291be0ad7..0b53652df6c 100644 --- a/src/lib/netlist/devices/nlid_truthtable.cpp +++ b/src/lib/netlist/devices/nlid_truthtable.cpp @@ -448,7 +448,7 @@ void truthtable_parser::parse(const std::vector &truthtable) { if (m_out_state[i] == m_out_state.mask()) throw nl_exception(plib::pfmt("truthtable: found element not set {1}\n").x(i) ); - m_out_state.set(i, m_out_state[i] | (ign[i] << m_NO));; + m_out_state.set(i, m_out_state[i] | (ign[i] << m_NO)); } *m_initialized = true; diff --git a/src/lib/netlist/macro/nlm_base.cpp b/src/lib/netlist/macro/nlm_base.cpp index 47a314f45ec..6a75f3ddc89 100644 --- a/src/lib/netlist/macro/nlm_base.cpp +++ b/src/lib/netlist/macro/nlm_base.cpp @@ -83,13 +83,13 @@ NETLIST_START(base) LOCAL_SOURCE(OPAMP_lib) LOCAL_SOURCE(otheric_lib) - INCLUDE(diode_models); - INCLUDE(bjt_models); - INCLUDE(family_models); - INCLUDE(TTL74XX_lib); - INCLUDE(CD4XXX_lib); - INCLUDE(OPAMP_lib); - INCLUDE(otheric_lib); + INCLUDE(diode_models) + INCLUDE(bjt_models) + INCLUDE(family_models) + INCLUDE(TTL74XX_lib) + INCLUDE(CD4XXX_lib) + INCLUDE(OPAMP_lib) + INCLUDE(otheric_lib) NETLIST_END() diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp index f6f10acb4c5..cfca9bf271f 100644 --- a/src/lib/netlist/nl_base.cpp +++ b/src/lib/netlist/nl_base.cpp @@ -293,8 +293,6 @@ void netlist_t::remove_dev(core_device_t *dev) ); } - - void netlist_t::start() { setup().start_devices(); @@ -344,7 +342,7 @@ void netlist_t::start() if (p != setup().m_param_values.end()) { //FIXME: check for errors ... - double v = plib::pstonum(p->second);; + double v = plib::pstonum(p->second); if (std::abs(v - std::floor(v)) > 1e-6 ) log().fatal(MF_1_HND_VAL_NOT_SUPPORTED, p->second); d->set_hint_deactivate(v == 0.0); diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 4903807e15a..83caa98b84e 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -153,7 +153,7 @@ class NETLIB_NAME(name) : public device_t #define NETLIB_UPDATE(chip) NETLIB_HANDLER(chip, update) // FIXME: NETLIB_PARENT_UPDATE should disappear -#define NETLIB_PARENT_UPDATE(chip) NETLIB_NAME(chip) :: update(); +#define NETLIB_PARENT_UPDATE(chip) NETLIB_NAME(chip) :: update() #define NETLIB_RESET(chip) void NETLIB_NAME(chip) :: reset(void) diff --git a/src/lib/netlist/nl_factory.h b/src/lib/netlist/nl_factory.h index ed82090915e..2e5ba33c8b1 100644 --- a/src/lib/netlist/nl_factory.h +++ b/src/lib/netlist/nl_factory.h @@ -36,6 +36,7 @@ { \ return std::unique_ptr(plib::palloc>(name, classname, def_param, pstring(__FILE__))); \ } \ + \ factory::constructor_ptr_t decl_ ## chip = NETLIB_NAME(chip ## _c); namespace netlist { diff --git a/src/lib/netlist/nl_parser.cpp b/src/lib/netlist/nl_parser.cpp index 1ff6ef6c6b7..a2ab7623b3b 100644 --- a/src/lib/netlist/nl_parser.cpp +++ b/src/lib/netlist/nl_parser.cpp @@ -30,7 +30,7 @@ bool parser_t::parse(const pstring &nlname) set_identifier_chars("abcdefghijklmnopqrstuvwvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_.-"); set_number_chars(".0123456789", "0123456789eE-."); //FIXME: processing of numbers //set_whitespace(pstring("").cat(' ').cat(9).cat(10).cat(13)); - set_whitespace(pstring("") + ' ' + (char)9 + (char)10 + (char)13); + set_whitespace(pstring("") + ' ' + static_cast(9) + static_cast(10) + static_cast(13)); set_comment("/*", "*/", "//"); m_tok_param_left = register_token("("); m_tok_param_right = register_token(")"); diff --git a/src/lib/netlist/plib/palloc.h b/src/lib/netlist/plib/palloc.h index 264cc656bbf..de992b7bc50 100644 --- a/src/lib/netlist/plib/palloc.h +++ b/src/lib/netlist/plib/palloc.h @@ -52,7 +52,7 @@ std::unique_ptr make_unique(Args&&... args) } template -static std::unique_ptr make_unique_base(Args&&... args) +std::unique_ptr make_unique_base(Args&&... args) { std::unique_ptr ret(new DC(std::forward(args)...)); return ret; diff --git a/src/lib/netlist/plib/pexception.h b/src/lib/netlist/plib/pexception.h index 4827081b754..1a5957099fd 100644 --- a/src/lib/netlist/plib/pexception.h +++ b/src/lib/netlist/plib/pexception.h @@ -23,7 +23,7 @@ public: explicit pexception(const pstring &text); pexception(const pexception &e) : std::exception(e), m_text(e.m_text) { } - virtual ~pexception() noexcept; + virtual ~pexception() noexcept override; const pstring &text() { return m_text; } const char* what() const noexcept override { return m_text.c_str(); } diff --git a/src/lib/netlist/plib/pfmtlog.cpp b/src/lib/netlist/plib/pfmtlog.cpp index 381c19bc349..2c120f6b7a4 100644 --- a/src/lib/netlist/plib/pfmtlog.cpp +++ b/src/lib/netlist/plib/pfmtlog.cpp @@ -69,7 +69,7 @@ pfmt &pfmt::format_element(const char *l, const unsigned cfmt_spec, ...) if (pstring("duxo").find(cfmt_spec) != pstring::npos) { if (pstring("duxo").find(pend) == pstring::npos) - fmt += (pstring(l) + (char) cfmt_spec); + fmt += (pstring(l) + static_cast(cfmt_spec)); else fmt = plib::left(fmt, fmt.size() - 1) + pstring(l) + plib::right(fmt, 1); } diff --git a/src/lib/netlist/plib/pfunction.cpp b/src/lib/netlist/plib/pfunction.cpp index f2ef3522813..f08fa2c60ea 100644 --- a/src/lib/netlist/plib/pfunction.cpp +++ b/src/lib/netlist/plib/pfunction.cpp @@ -199,8 +199,8 @@ double pfunction::evaluate(const std::vector &values) OP(SUB, 1, ST2 - ST1) OP(DIV, 1, ST2 / ST1) OP(POW, 1, std::pow(ST2, ST1)) - OP(SIN, 0, std::sin(ST2)); - OP(COS, 0, std::cos(ST2)); + OP(SIN, 0, std::sin(ST2)) + OP(COS, 0, std::cos(ST2)) case RAND: stack[ptr++] = lfsr_random(); break; diff --git a/src/lib/netlist/plib/pomp.h b/src/lib/netlist/plib/pomp.h index 6559207f09d..221c0d61c00 100644 --- a/src/lib/netlist/plib/pomp.h +++ b/src/lib/netlist/plib/pomp.h @@ -18,8 +18,8 @@ namespace plib { namespace omp { -template -void for_static(const int start, const int end, const T &what) +template +void for_static(const I start, const I end, const T &what) { #if HAS_OPENMP && USE_OPENMP #pragma omp parallel @@ -28,19 +28,19 @@ void for_static(const int start, const int end, const T &what) #if HAS_OPENMP && USE_OPENMP #pragma omp for schedule(static) #endif - for (int i = start; i < end; i++) + for (I i = start; i < end; i++) what(i); } } -inline void set_num_threads(const int threads) +inline void set_num_threads(const std::size_t threads) { #if HAS_OPENMP && USE_OPENMP omp_set_num_threads(threads); #endif } -inline int get_max_threads() +inline std::size_t get_max_threads() { #if HAS_OPENMP && USE_OPENMP return omp_get_max_threads(); diff --git a/src/lib/netlist/plib/pstring.h b/src/lib/netlist/plib/pstring.h index 677ce9e43b8..ebdca57c9a5 100644 --- a/src/lib/netlist/plib/pstring.h +++ b/src/lib/netlist/plib/pstring.h @@ -561,7 +561,9 @@ namespace plib decltype(arg.c_str()) cstr = arg.c_str(); std::size_t idx(0); auto ret = pstonum_helper()(cstr, &idx); - if (ret >= std::numeric_limits::lowest() && ret <= std::numeric_limits::max()) + typedef decltype(ret) ret_type; + if (ret >= static_cast(std::numeric_limits::lowest()) + && ret <= static_cast(std::numeric_limits::max())) //&& (ret == T(0) || std::abs(ret) >= std::numeric_limits::min() )) { if (cstr[idx] != 0) diff --git a/src/lib/netlist/plib/putil.h b/src/lib/netlist/plib/putil.h index 914d9820560..05cc44f5f68 100644 --- a/src/lib/netlist/plib/putil.h +++ b/src/lib/netlist/plib/putil.h @@ -74,6 +74,9 @@ namespace plib std::vector psplit(const pstring &str, const pstring &onstr, bool ignore_empty = false); std::vector psplit(const pstring &str, const std::vector &onstrl); + std::vector psplit_r(const std::string &stri, + const std::string &token, + const std::size_t maxsplit); } diff --git a/src/lib/netlist/solver/nld_matrix_solver.h b/src/lib/netlist/solver/nld_matrix_solver.h index da44370d0d9..d60a16499b6 100644 --- a/src/lib/netlist/solver/nld_matrix_solver.h +++ b/src/lib/netlist/solver/nld_matrix_solver.h @@ -232,7 +232,7 @@ void matrix_solver_t::build_LE_A() for (std::size_t k = 0; k < iN; k++) { terms_for_net_t *terms = m_terms[k].get(); - nl_double * Ak = &child.A(k, 0); + nl_double * Ak = &child.A(k, 0ul); for (std::size_t i=0; i < iN; i++) Ak[i] = 0.0; diff --git a/src/lib/netlist/solver/nld_ms_direct.h b/src/lib/netlist/solver/nld_ms_direct.h index f03cb738028..639d9f4ee18 100644 --- a/src/lib/netlist/solver/nld_ms_direct.h +++ b/src/lib/netlist/solver/nld_ms_direct.h @@ -9,6 +9,7 @@ #define NLD_MS_DIRECT_H_ #include +#include #include "nld_solver.h" #include "nld_matrix_solver.h" @@ -55,15 +56,11 @@ protected: void LE_back_subst(T * RESTRICT x); #if (NL_USE_DYNAMIC_ALLOCATION) - template - nl_ext_double &A(const T1 &r, const T2 &c) { return m_A[r * m_pitch + c]; } - template - nl_ext_double &RHS(const T1 &r) { return m_A[r * m_pitch + N()]; } + nl_ext_double &A(const std::size_t r, const std::size_t c) { return m_A[r * m_pitch + c]; } + nl_ext_double &RHS(const std::size_t r) { return m_A[r * m_pitch + N()]; } #else - template - nl_ext_double &A(const T1 &r, const T2 &c) { return m_A[r][c]; } - template - nl_ext_double &RHS(const T1 &r) { return m_A[r][N()]; } + nl_ext_double &A(const std::size_t r, const std::size_t c) { return m_A[r][c]; } + nl_ext_double &RHS(const std::size_t r) { return m_A[r][N()]; } #endif nl_double m_last_RHS[storage_N]; // right hand side - contains currents diff --git a/src/lib/netlist/solver/nld_ms_direct1.h b/src/lib/netlist/solver/nld_ms_direct1.h index 6e1f99bad7d..4967a9dc637 100644 --- a/src/lib/netlist/solver/nld_ms_direct1.h +++ b/src/lib/netlist/solver/nld_ms_direct1.h @@ -30,7 +30,7 @@ public: // matrix_solver - Direct1 // ---------------------------------------------------------------------------------------- -inline unsigned matrix_solver_direct1_t::vsolve_non_dynamic(ATTR_UNUSED const bool newton_raphson) +inline unsigned matrix_solver_direct1_t::vsolve_non_dynamic(const bool newton_raphson) { build_LE_A(); build_LE_RHS(); diff --git a/src/lib/netlist/solver/nld_ms_direct2.h b/src/lib/netlist/solver/nld_ms_direct2.h index 4004bce9cc4..65cf30c0202 100644 --- a/src/lib/netlist/solver/nld_ms_direct2.h +++ b/src/lib/netlist/solver/nld_ms_direct2.h @@ -30,7 +30,7 @@ public: // matrix_solver - Direct2 // ---------------------------------------------------------------------------------------- -inline unsigned matrix_solver_direct2_t::vsolve_non_dynamic(ATTR_UNUSED const bool newton_raphson) +inline unsigned matrix_solver_direct2_t::vsolve_non_dynamic(const bool newton_raphson) { build_LE_A(); build_LE_RHS(); diff --git a/src/lib/netlist/solver/nld_ms_gmres.h b/src/lib/netlist/solver/nld_ms_gmres.h index 2e4e447d14f..323def01d32 100644 --- a/src/lib/netlist/solver/nld_ms_gmres.h +++ b/src/lib/netlist/solver/nld_ms_gmres.h @@ -13,6 +13,7 @@ #define NLD_MS_GMRES_H_ #include +#include #include "mat_cr.h" #include "nld_ms_direct.h" @@ -167,21 +168,19 @@ unsigned matrix_solver_GMRES_t::vsolve_non_dynamic(const bool ne new_V[k] = this->m_nets[k]->Q_Analog(); } - mat.ia[iN] = static_cast(mat.nz_num); + mat.ia[iN] = static_cast(mat.nz_num); const nl_double accuracy = this->m_params.m_accuracy; - unsigned mr = iN; - if (iN > 3 ) - mr = static_cast(std::sqrt(iN) * 2.0); + const std::size_t mr = (iN > 3 ) ? static_cast(std::sqrt(iN) * 2.0) : iN; unsigned iter = std::max(1u, this->m_params.m_gs_loops); unsigned gsl = solve_ilu_gmres(new_V, RHS, iter, mr, accuracy); - unsigned failed = mr * iter; + const std::size_t failed = mr * iter; this->m_iterative_total += gsl; this->m_stat_calculations++; - if (gsl>=failed) + if (gsl >= failed) { this->m_iterative_fail++; return matrix_solver_direct_t::vsolve_non_dynamic(newton_raphson); diff --git a/src/lib/netlist/solver/nld_solver.cpp b/src/lib/netlist/solver/nld_solver.cpp index d639bc6c858..09f0173b339 100644 --- a/src/lib/netlist/solver/nld_solver.cpp +++ b/src/lib/netlist/solver/nld_solver.cpp @@ -93,17 +93,18 @@ NETLIB_UPDATE(solver) /* FIXME: Needs a more elegant solution */ bool force_solve = (netlist().time() < netlist_time::from_double(2 * m_params.m_max_timestep)); - std::size_t nthreads = std::min(m_parallel(), plib::omp::get_max_threads()); + std::size_t nthreads = std::min(static_cast(m_parallel()), plib::omp::get_max_threads()); std::size_t t_cnt = 0; - int solv[128]; - for (int i = 0; i < m_mat_solvers.size(); i++) + std::size_t solv[128]; + for (std::size_t i = 0; i < m_mat_solvers.size(); i++) if (m_mat_solvers[i]->has_timestep_devices() || force_solve) solv[t_cnt++] = i; if (nthreads > 1 && t_cnt > 1) { plib::omp::set_num_threads(nthreads); - plib::omp::for_static(0, t_cnt, [this, &solv](int i) { ATTR_UNUSED const netlist_time ts = this->m_mat_solvers[solv[i]]->solve(); }); + plib::omp::for_static(static_cast(0), t_cnt, [this, &solv](std::size_t i) + { ATTR_UNUSED const netlist_time ts = this->m_mat_solvers[solv[i]]->solve(); }); } else for (auto & solver : m_mat_solvers) diff --git a/src/lib/netlist/solver/vector_base.h b/src/lib/netlist/solver/vector_base.h index 28f5fa0dd44..218ae9d81f3 100644 --- a/src/lib/netlist/solver/vector_base.h +++ b/src/lib/netlist/solver/vector_base.h @@ -11,6 +11,7 @@ #define VECTOR_BASE_H_ #include +#include #include "../plib/pconfig.h" #if 0 diff --git a/src/lib/netlist/tools/nl_convert.cpp b/src/lib/netlist/tools/nl_convert.cpp index 4488396a131..b89e94ca3e5 100644 --- a/src/lib/netlist/tools/nl_convert.cpp +++ b/src/lib/netlist/tools/nl_convert.cpp @@ -408,7 +408,7 @@ nl_convert_eagle_t::tokenizer::tokenizer(nl_convert_eagle_t &convert, plib::putf set_identifier_chars("abcdefghijklmnopqrstuvwvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_.-"); set_number_chars(".0123456789", "0123456789eE-."); //FIXME: processing of numbers //set_whitespace(pstring("").cat(' ').cat(9).cat(10).cat(13)); - set_whitespace(pstring("") + ' ' + (char)9 + (char)10 + (char)13); + set_whitespace(pstring("") + ' ' + static_cast(9) + static_cast(10) + static_cast(13)); /* FIXME: gnetlist doesn't print comments */ set_comment("/*", "*/", "//"); set_string_char('\''); @@ -546,7 +546,7 @@ nl_convert_rinf_t::tokenizer::tokenizer(nl_convert_rinf_t &convert, plib::putf8_ set_identifier_chars(".abcdefghijklmnopqrstuvwvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_-"); set_number_chars("0123456789", "0123456789eE-."); //FIXME: processing of numbers //set_whitespace(pstring("").cat(' ').cat(9).cat(10).cat(13)); - set_whitespace(pstring("") + ' ' + (char)9 + (char)10 + (char)13); + set_whitespace(pstring("") + ' ' + static_cast(9) + static_cast(10) + static_cast(13)); /* FIXME: gnetlist doesn't print comments */ set_comment("","","//"); // FIXME:needs to be confirmed set_string_char('"');