diff --git a/doc/modules/ROOT/examples/accept_no_visitors.cpp b/doc/modules/ROOT/examples/accept_no_visitors.cpp index cf102ff..187ecb7 100644 --- a/doc/modules/ROOT/examples/accept_no_visitors.cpp +++ b/doc/modules/ROOT/examples/accept_no_visitors.cpp @@ -25,7 +25,7 @@ struct Plus : Node { Plus( shared_virtual_ptr left, shared_virtual_ptr right) - : left(left), right(right) { + : left(std::move(left)), right(std::move(right)) { } shared_virtual_ptr left, right; @@ -35,7 +35,7 @@ struct Times : Node { Times( shared_virtual_ptr left, shared_virtual_ptr right) - : left(left), right(right) { + : left(std::move(left)), right(std::move(right)) { } shared_virtual_ptr left, right; diff --git a/include/boost/openmethod/core.hpp b/include/boost/openmethod/core.hpp index 87906c3..7c2d383 100644 --- a/include/boost/openmethod/core.hpp +++ b/include/boost/openmethod/core.hpp @@ -359,6 +359,7 @@ struct use_class_aux> resolve_type_ids(); } + // coverity[uninit] - zero-initialized static storage Registry::classes.push_back(*this); } @@ -2403,6 +2404,8 @@ method::method() { this->not_implemented = reinterpret_cast(fn_not_implemented); this->ambiguous = reinterpret_cast(fn_ambiguous); + // zero-initalized static variable + // coverity[uninit_use] Registry::methods.push_back(*this); } diff --git a/include/boost/openmethod/interop/std_unique_ptr.hpp b/include/boost/openmethod/interop/std_unique_ptr.hpp index ea702b9..bcda19f 100644 --- a/include/boost/openmethod/interop/std_unique_ptr.hpp +++ b/include/boost/openmethod/interop/std_unique_ptr.hpp @@ -43,10 +43,12 @@ struct virtual_traits, Registry> { if constexpr (detail::requires_dynamic_cast) { auto p = &Registry::rtti::template dynamic_cast_ref< typename Derived::element_type&>(*ptr); + // coverity[alloc_fn] ptr.release(); return Derived(p); } else { auto p = &static_cast(*ptr); + // coverity[alloc_fn] ptr.release(); return Derived(p); } diff --git a/include/boost/openmethod/policies/default_error_handler.hpp b/include/boost/openmethod/policies/default_error_handler.hpp index 8766e75..342fc7b 100644 --- a/include/boost/openmethod/policies/default_error_handler.hpp +++ b/include/boost/openmethod/policies/default_error_handler.hpp @@ -94,11 +94,9 @@ struct default_error_handler : error_handler { //! //! @param new_handler the new function. //! @return The previous function. + // coverity[auto_causes_copy] static auto set(function_type new_handler) -> function_type { - auto prev = handler; - handler = std::move(new_handler); - - return prev; + return std::exchange(handler, std::move(new_handler)); } //! The default error handler function. diff --git a/test/test_compiler.cpp b/test/test_compiler.cpp index 09c9193..a6e7732 100644 --- a/test/test_compiler.cpp +++ b/test/test_compiler.cpp @@ -47,6 +47,7 @@ template auto sstr(Ts... args) { std::vector vec{args...}; std::sort(vec.begin(), vec.end()); + return str(vec); } diff --git a/test/test_dispatch_intrusive_ptr.cpp b/test/test_dispatch_intrusive_ptr.cpp index f91baae..3be86dc 100644 --- a/test/test_dispatch_intrusive_ptr.cpp +++ b/test/test_dispatch_intrusive_ptr.cpp @@ -136,7 +136,6 @@ BOOST_AUTO_TEST_CASE(intrusive_virtual_ptr_by_value) { } } // namespace BOOST_OPENMETHOD_GENSYM - namespace BOOST_OPENMETHOD_GENSYM { // ----------------------------------------------------------------------------- diff --git a/test/test_shared_virtual_ptr_value_semantics.cpp b/test/test_shared_virtual_ptr_value_semantics.cpp index aa4d88c..aef426e 100644 --- a/test/test_shared_virtual_ptr_value_semantics.cpp +++ b/test/test_shared_virtual_ptr_value_semantics.cpp @@ -194,6 +194,7 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( shared_virtual_ptr q(std::move(p)); BOOST_TEST(q.get() == snoopy.get()); BOOST_TEST(q.vptr() == Registry::template static_vptr); + // coverity[use_after_move] BOOST_TEST(p.get() == nullptr); BOOST_TEST(p.vptr() == nullptr); } diff --git a/test/test_smart_virtual_ptr_value_semantics.cpp b/test/test_smart_virtual_ptr_value_semantics.cpp index 395787f..c7228c9 100644 --- a/test/test_smart_virtual_ptr_value_semantics.cpp +++ b/test/test_smart_virtual_ptr_value_semantics.cpp @@ -259,6 +259,7 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( dog_virtual_ptr q(std::move(p)); BOOST_TEST(q.get() == snoopy.get()); BOOST_TEST(q.vptr() == default_registry::template static_vptr); + // coverity[use_after_move] BOOST_TEST(p.get() == nullptr); BOOST_TEST(p.vptr() == nullptr); } @@ -385,6 +386,7 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( BOOST_TEST(dog.get() == p); if (smart::cast_moves()) { + // coverity[use_after_move] BOOST_TEST(animal.get() == nullptr); } } diff --git a/test/test_static_list.cpp b/test/test_static_list.cpp index 8d4cf4f..e736135 100644 --- a/test/test_static_list.cpp +++ b/test/test_static_list.cpp @@ -101,6 +101,8 @@ BOOST_AUTO_TEST_CASE(test_list) { } struct static_value : static_list::static_link { + // coverity[uninit_in_ctor] + // coverity[uninit_use_in_call] explicit static_value(static_list& reg) { reg.push_back(*this); } diff --git a/test/test_unique_virtual_ptr_value_semantics.cpp b/test/test_unique_virtual_ptr_value_semantics.cpp index 3d858a8..cfff236 100644 --- a/test/test_unique_virtual_ptr_value_semantics.cpp +++ b/test/test_unique_virtual_ptr_value_semantics.cpp @@ -116,9 +116,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( unique_virtual_ptr p(std::make_unique()); auto dog = p.get(); unique_virtual_ptr q(std::move(p)); - // coverity[use_after_move] BOOST_TEST(q.get() == dog); BOOST_TEST(q.vptr() == Registry::template static_vptr); + // coverity[use_after_move] BOOST_TEST(p.get() == nullptr); BOOST_TEST(p.vptr() == nullptr); } @@ -128,9 +128,9 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( unique_virtual_ptr p(std::make_unique()); auto dog = p.get(); unique_virtual_ptr q(std::move(p)); - // coverity[use_after_move] BOOST_TEST(q.get() == dog); BOOST_TEST(q.vptr() == Registry::template static_vptr); + // coverity[use_after_move] BOOST_TEST(p.get() == nullptr); BOOST_TEST(p.vptr() == nullptr); } @@ -271,6 +271,7 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( unique_virtual_ptr>(std::move(base)); BOOST_TEST(derived.get() == p); BOOST_TEST(derived.vptr() == default_registry::static_vptr); + // coverity[use_after_move] BOOST_TEST(base.get() == nullptr); }