diff --git a/src/lib/netlist/analog/nld_bjt.cpp b/src/lib/netlist/analog/nld_bjt.cpp index 7ec4af98d52..abd4486c362 100644 --- a/src/lib/netlist/analog/nld_bjt.cpp +++ b/src/lib/netlist/analog/nld_bjt.cpp @@ -309,8 +309,8 @@ namespace analog NETLIB_UPDATE(QBJT_switch) { - auto solv(m_RB.solver()); - if (solv) + auto *solv(m_RB.solver()); + if (solv != nullptr) solv->solve_now(); else m_RC.solver()->solve_now(); @@ -373,8 +373,8 @@ namespace analog NETLIB_UPDATE(QBJT_EB) { - auto solv(m_D_EB.solver()); - if (solv) + auto *solv(m_D_EB.solver()); + if (solv != nullptr) solv->solve_now(); else m_D_CB.solver()->solve_now(); diff --git a/src/lib/netlist/analog/nlid_twoterm.cpp b/src/lib/netlist/analog/nlid_twoterm.cpp index a449e19b078..29714e1ff7c 100644 --- a/src/lib/netlist/analog/nlid_twoterm.cpp +++ b/src/lib/netlist/analog/nlid_twoterm.cpp @@ -18,7 +18,7 @@ namespace analog solver::matrix_solver_t * NETLIB_NAME(twoterm)::solver() const noexcept { auto *solv(m_P.solver()); - if (solv) + if (solv != nullptr) return solv; return m_N.solver(); } @@ -27,7 +27,7 @@ namespace analog void NETLIB_NAME(twoterm)::solve_now() const { auto *solv(solver()); - if (solv) + if (solv != nullptr) solv->solve_now(); } diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index dcb1c35f105..c84e54e3a5f 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -31,14 +31,15 @@ TIDY_FLAGSX += -llvm-header-guard,-cppcoreguidelines-pro-type-reinterpret-cast, TIDY_FLAGSX += -modernize-use-default-member-init,-cppcoreguidelines-pro-bounds-constant-array-index, TIDY_FLAGSX += -modernize-pass-by-value,-cppcoreguidelines-pro-type-static-cast-downcast, TIDY_FLAGSX += -cppcoreguidelines-avoid-magic-numbers, -#TIDY_FLAGSX += -cppcoreguidelines-macro-usage, +TIDY_FLAGSX += -cppcoreguidelines-macro-usage, TIDY_FLAGSX += -cppcoreguidelines-non-private-member-variables-in-classes,-misc-non-private-member-variables-in-classes, TIDY_FLAGSX += -bugprone-macro-parentheses, #TIDY_FLAGSX += -misc-macro-parentheses, TIDY_FLAGSX += -bugprone-too-small-loop-variable, TIDY_FLAGSX += -modernize-use-trailing-return-type, TIDY_FLAGSX += -cppcoreguidelines-pro-bounds-array-to-pointer-decay, -TIDY_FLAGSX += -readability-magic-numbers,-readability-implicit-bool-conversion,-readability-braces-around-statements, +TIDY_FLAGSX += -readability-magic-numbers,-readability-braces-around-statements, +#TIDY_FLAGSX += -readability-implicit-bool-conversion, TIDY_FLAGSX += -readability-named-parameter,-readability-function-size, TIDY_FLAGSX += -llvmlibc-restrict-system-libc-headers,-llvmlibc-implementation-in-namespace,-llvmlibc-callee-namespace, #TIDY_FLAGSX += -cppcoreguidelines-avoid-non-const-global-variables @@ -290,7 +291,12 @@ gcc9: clang: #$(MAKE) CC=clang++-11 LD=clang++-11 OBJ=obj/clang CEXTRAFLAGS="-march=native -msse4.2 -Weverything -Wall -pedantic -Wpedantic -Wunused-private-field -Wno-padded -Wno-unused-template -Wno-missing-variable-declarations -Wno-float-equal -Wconversion -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-format-nonliteral -Wno-exit-time-destructors" - $(MAKE) CC=clang++-11 LD=clang++-11 OBJ=obj/clang CEXTRAFLAGS="-march=native -msse4.2 -Weverything -Wall -pedantic -Wpedantic -Wunused-private-field -Werror -Wno-padded -Wno-weak-vtables -Wno-unused-template -Wno-missing-variable-declarations -Wno-float-equal -Wconversion -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-format-nonliteral -Wno-exit-time-destructors" + $(MAKE) CC=clang++-11 LD=clang++-11 OBJ=obj/clang CEXTRAFLAGS="-march=native \ + -msse4.2 -Weverything -Wall -pedantic -Wpedantic -Wunused-private-field \ + -Werror -Wno-padded -Wno-weak-vtables -Wno-unused-template \ + -Wno-missing-variable-declarations -Wno-float-equal -Wconversion \ + -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-format-nonliteral \ + -Wno-exit-time-destructors -Winconsistent-missing-destructor-override" 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" @@ -304,9 +310,8 @@ nvcc: tidy_db: compile_commands_prefix $(ALL_TIDY_FILES) compile_commands_postfix # -# -Wno-c++11-narrowing : seems a bit broken # Mostly done: -Wno-weak-vtables -Wno-cast-align -# FIXME: -Wno-weak-vtables -Wno-missing-variable-declarations -Wno-conversion -Wno-exit-time-destructors +# FIXME: -Wno-weak-vtables -Wno-exit-time-destructors # FIXME: -Winconsistent-missing-destructor-override : c++ community has diverging opinions on this https://github.com/isocpp/CppCoreGuidelines/issues/721 # FIXME: -Wunreachable-code : False warnings, this a documented clang bug: https://llvm.org/bugs/show_bug.cgi?id=28994 # -Wweak-template-vtables diff --git a/src/lib/netlist/devices/nld_7497.cpp b/src/lib/netlist/devices/nld_7497.cpp index 06ac9996b45..bbc4502aa9e 100644 --- a/src/lib/netlist/devices/nld_7497.cpp +++ b/src/lib/netlist/devices/nld_7497.cpp @@ -56,7 +56,7 @@ namespace netlist NETLIB_HANDLERI(clk_strb); friend class NETLIB_NAME(7497_dip); - private: + object_array_t m_B; logic_input_t m_CLK; logic_input_t m_STRBQ; diff --git a/src/lib/netlist/devices/nlid_proxy.cpp b/src/lib/netlist/devices/nlid_proxy.cpp index 74ba40f5fe3..1631d4f753b 100644 --- a/src/lib/netlist/devices/nlid_proxy.cpp +++ b/src/lib/netlist/devices/nlid_proxy.cpp @@ -40,11 +40,11 @@ namespace netlist /*detail::terminal_type::INPUT,*/ false)); auto *tp_cn(anetlist.setup().find_terminal(devname + "." + pwr_sym.second, /*detail::terminal_type::INPUT,*/ false)); - if (tp_ct && tp_cn) + if ((tp_ct != nullptr) && (tp_cn != nullptr)) { - if (tp_ct && !tp_ct->is_analog()) + if (!tp_ct->is_analog()) throw nl_exception(plib::pfmt("Not an analog terminal: {1}")(tp_ct->name())); - if (tp_cn && !tp_cn->is_analog()) + if (!tp_cn->is_analog()) throw nl_exception(plib::pfmt("Not an analog terminal: {1}")(tp_cn->name())); auto *tp_t = static_cast(tp_ct); @@ -52,8 +52,8 @@ namespace netlist if (f && (tp_t != nullptr && tn_t != nullptr)) log().warning(MI_MULTIPLE_POWER_TERMINALS_ON_DEVICE(inout_proxied->device().name(), m_tp->name(), m_tn->name(), - tp_t ? tp_t->name() : "", - tn_t ? tn_t->name() : "")); + tp_t != nullptr ? tp_t->name() : "", + tn_t != nullptr ? tn_t->name() : "")); else if (tp_t != nullptr && tn_t != nullptr) { m_tp = tp_t; @@ -64,8 +64,8 @@ namespace netlist } if (!f) throw nl_exception(MF_NO_POWER_TERMINALS_ON_DEVICE_2(name, anetlist.setup().de_alias(inout_proxied->device().name()))); - else - log().verbose("D/A Proxy: Found power terminals on device {1}", inout_proxied->device().name()); + + log().verbose("D/A Proxy: Found power terminals on device {1}", inout_proxied->device().name()); } // ---------------------------------------------------------------------------------------- diff --git a/src/lib/netlist/devices/nlid_system.h b/src/lib/netlist/devices/nlid_system.h index d399da27506..eb7f7602d79 100644 --- a/src/lib/netlist/devices/nlid_system.h +++ b/src/lib/netlist/devices/nlid_system.h @@ -67,7 +67,7 @@ namespace devices NETLIB_UPDATEI() { - m_Q.push(!m_feedback(), m_inc); + m_Q.push(m_feedback() ^ 1, m_inc); } private: @@ -104,7 +104,7 @@ namespace devices { m_funcparam[0] = exec().time().as_fp(); const netlist_time m_inc = netlist_time::from_fp(m_compiled->evaluate(m_funcparam)); - m_Q.push(!m_feedback(), m_inc); + m_Q.push(m_feedback() ^ 1, m_inc); } private: diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp index 2825b20a91a..8022ae7a3df 100644 --- a/src/lib/netlist/nl_base.cpp +++ b/src/lib/netlist/nl_base.cpp @@ -401,13 +401,13 @@ namespace netlist } log().verbose("Total calls : {1:12} {2:12} {3:12}", total_count, - total_time, total_time / static_cast(total_count ? total_count : 1)); + total_time, total_time / static_cast((total_count > 0) ? total_count : 1)); log().verbose("Total loop {1:15}", si.m_stat_mainloop()); log().verbose("Total time {1:15}", total_time); // FIXME: clang complains about unreachable code without - const auto clang_workaround_unreachable_code = NL_USE_QUEUE_STATS; + const bool clang_workaround_unreachable_code(NL_USE_QUEUE_STATS>0); if (clang_workaround_unreachable_code) { // Only one serialization should be counted in total time @@ -714,7 +714,7 @@ namespace netlist { const auto *solv(solver()); // Nets may belong to railnets which do not have a solver attached - if (solv) + if (solv != nullptr) solver()->solve_now(); } diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 02032a68cc1..ad5a85725af 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -1059,8 +1059,8 @@ namespace netlist /// /// This function throws an exception if actually called. /// - [[noreturn]] void set_tristate(bool v, - netlist_time ts_off_on, netlist_time ts_on_off) const + [[noreturn]] static void set_tristate(netlist_sig_t v, + netlist_time ts_off_on, netlist_time ts_on_off) { plib::unused_var(v, ts_off_on, ts_on_off); throw nl_exception("set_tristate on logic_output should never be called!"); @@ -1104,7 +1104,7 @@ namespace netlist m_last_logic = newQ; } - void set_tristate(bool v, + void set_tristate(netlist_sig_t v, netlist_time ts_off_on, netlist_time ts_on_off) noexcept { if (!m_force_logic) @@ -1980,10 +1980,10 @@ namespace netlist } template - object_array_base_t(D &dev, std::size_t offset, const pstring &fmt, nldelegate &&delegate) + object_array_base_t(D &dev, std::size_t offset, const pstring &fmt, nldelegate delegate) { for (std::size_t i = 0; iemplace(i, dev, formatted(fmt, i+offset), std::move(delegate)); + this->emplace(i, dev, formatted(fmt, i+offset), delegate); } template @@ -2000,13 +2000,11 @@ namespace netlist protected: object_array_base_t() = default; - protected: static pstring formatted(const pstring &fmt, std::size_t n) { if (N != 1) return plib::pfmt(fmt)(n); - else - return plib::pfmt(fmt)(""); + return plib::pfmt(fmt)(""); } }; @@ -2111,7 +2109,7 @@ namespace netlist (*this)[i].push((v >> i) & 1, t[i]); } - void set_tristate(bool v, + void set_tristate(netlist_sig_t v, netlist_time ts_off_on, netlist_time ts_on_off) noexcept { for (std::size_t i = 0; i < N; i++) @@ -2141,7 +2139,7 @@ namespace netlist (*this)[i].push((v >> i) & 1, t); } - void set_tristate(bool v, + void set_tristate(netlist_sig_t v, netlist_time ts_off_on, netlist_time ts_on_off) noexcept { for (std::size_t i = 0; i < N; i++) @@ -2387,6 +2385,7 @@ namespace netlist inline void terminal_t::set_ptrs(nl_fptype *gt, nl_fptype *go, nl_fptype *Idr) noexcept(false) { + // NOLINTNEXTLINE(readability-implicit-bool-conversion) if (!(gt && go && Idr) && (gt || go || Idr)) { throw nl_exception("Inconsistent nullptrs for terminal {}", name()); diff --git a/src/lib/netlist/nl_factory.h b/src/lib/netlist/nl_factory.h index f39cd5fce0f..90c77dc1e34 100644 --- a/src/lib/netlist/nl_factory.h +++ b/src/lib/netlist/nl_factory.h @@ -33,6 +33,7 @@ return devtype::create(p_name, std::move(sl)); \ } \ \ + extern factory::constructor_ptr_t decl_ ## p_alias; \ factory::constructor_ptr_t decl_ ## p_alias = NETLIB_NAME(p_alias ## _c); namespace netlist { @@ -50,6 +51,7 @@ namespace factory { , m_sourceloc(std::move(sourceloc)) { } + ~properties() = default; PCOPYASSIGNMOVE(properties, default) const pstring &defparam() const noexcept @@ -153,7 +155,7 @@ namespace factory { // factory_creator_ptr_t // ----------------------------------------------------------------------------- - using constructor_ptr_t = plib::unique_ptr (*)(); + using constructor_ptr_t = plib::unique_ptr (*const)(); template plib::unique_ptr constructor_t(const pstring &name, properties &&props) diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index b38bea0fddf..466b7c1faed 100755 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -53,7 +53,7 @@ namespace netlist std::initializer_list more_parameters) { std::vector params; - const auto *i(more_parameters.begin()); + auto i(more_parameters.begin()); pstring name(*i); ++i; for (; i != more_parameters.end(); ++i) @@ -1527,7 +1527,7 @@ void setup_t::prepare_to_run() d.second->set_hint_deactivate(false); } - if (errcnt) + if (errcnt > 0) { log().fatal(MF_ERRORS_FOUND(errcnt)); throw nl_exception(MF_ERRORS_FOUND(errcnt)); diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h index ef709e74571..9a5569711e2 100644 --- a/src/lib/netlist/nl_setup.h +++ b/src/lib/netlist/nl_setup.h @@ -177,6 +177,8 @@ namespace netlist : m_device(&device) , m_param(¶m) { } + + ~param_ref_t() = default; PCOPYASSIGNMOVE(param_ref_t, default) const core_device_t &device() const noexcept { return *m_device; } diff --git a/src/lib/netlist/nltypes.h b/src/lib/netlist/nltypes.h index 149d59097bf..facf01a8f7e 100644 --- a/src/lib/netlist/nltypes.h +++ b/src/lib/netlist/nltypes.h @@ -191,7 +191,7 @@ namespace netlist } }; - /// \brief: used to hold two static netlist_time values + /// \brief: used to hold three static netlist_time values /// template