Compare commits

...

12 Commits

Author SHA1 Message Date
Peter Dimov
02cc561248 Only use warnings-as-errors on msvc, gcc, clang 2020-04-28 05:05:57 +03:00
Peter Dimov
066b398114 Disable -Wc11-extensions in sp_counted_base_clang.hpp 2020-04-27 00:50:15 +03:00
Peter Dimov
9c43c69c14 Add sp_pedantic_test 2020-04-26 19:57:05 +03:00
Peter Dimov
eb8998cd91 Add Clang 10 to Travis 2020-04-26 18:27:35 +03:00
Peter Dimov
0ddfab493c Do not enable -Wsuggest-override in C++03 mode 2020-04-14 07:12:35 +03:00
Peter Dimov
a2732e207a Add BOOST_OVERRIDE to sp_counted_impl.hpp 2020-04-14 00:55:52 +03:00
Peter Dimov
5be7523ebe Merge branch 'develop' into feature/suggest-override 2020-04-14 00:45:24 +03:00
Peter Dimov
2320dafc03 Add BOOST_OVERRIDE to bad_weak_ptr.hpp and local_counted_base.hpp 2020-04-14 00:42:57 +03:00
Peter Dimov
7ab4093f46 Use shared_ptr and make_shared in sp_override_test 2020-04-14 00:32:25 +03:00
Peter Dimov
296c203135 Rename sp_warning_test to sp_override_test 2020-04-14 00:15:32 +03:00
Glen Fernandes
2dd35e5fbc Mark functions with BOOST_OVERRIDE 2020-04-13 15:34:13 -04:00
Peter Dimov
977544feda Add sp_warning_test 2020-04-08 21:25:36 +03:00
10 changed files with 84 additions and 21 deletions

View File

@@ -299,6 +299,19 @@ matrix:
- sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main' - sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main'
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key' key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
- os: linux
dist: xenial
compiler: clang++-10
env: TOOLSET=clang COMPILER=clang++-10 CXXSTD=03,11,14,17,2a
addons:
apt:
packages:
- clang-10
sources:
- ubuntu-toolchain-r-test
- sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main'
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
- os: linux - os: linux
compiler: clang++-8 compiler: clang++-8
env: UBSAN=1 TOOLSET=clang COMPILER=clang++-8 CXXSTD=03,11,14,17,2a UBSAN_OPTIONS=print_stacktrace=1 env: UBSAN=1 TOOLSET=clang COMPILER=clang++-8 CXXSTD=03,11,14,17,2a UBSAN_OPTIONS=print_stacktrace=1

View File

@@ -21,11 +21,12 @@ public:
count_ = shared_count(base); count_ = shared_count(base);
} }
virtual void local_cb_destroy() BOOST_SP_NOEXCEPT { void local_cb_destroy() BOOST_SP_NOEXCEPT BOOST_OVERRIDE {
shared_count().swap(count_); shared_count().swap(count_);
} }
virtual shared_count local_cb_get_shared_count() const BOOST_SP_NOEXCEPT { shared_count local_cb_get_shared_count() const
BOOST_SP_NOEXCEPT BOOST_OVERRIDE {
return count_; return count_;
} }

View File

@@ -206,28 +206,29 @@ public:
return state_; return state_;
} }
virtual void dispose() BOOST_SP_NOEXCEPT { void dispose() BOOST_SP_NOEXCEPT BOOST_OVERRIDE {
boost::alloc_destroy_n(state_.allocator(), boost::alloc_destroy_n(state_.allocator(),
boost::first_scalar(sp_array_start<type>(this)), boost::first_scalar(sp_array_start<type>(this)),
state_.size() * sp_array_count<type>::value); state_.size() * sp_array_count<type>::value);
} }
virtual void destroy() BOOST_SP_NOEXCEPT { void destroy() BOOST_SP_NOEXCEPT BOOST_OVERRIDE {
sp_array_creator<allocator, sp_array_base> other(state_.allocator(), sp_array_creator<allocator, sp_array_base> other(state_.allocator(),
state_.size()); state_.size());
this->~sp_array_base(); this->~sp_array_base();
other.destroy(this); other.destroy(this);
} }
virtual void* get_deleter(const sp_typeinfo_&) BOOST_SP_NOEXCEPT { void* get_deleter(const sp_typeinfo_&) BOOST_SP_NOEXCEPT BOOST_OVERRIDE {
return 0; return 0;
} }
virtual void* get_local_deleter(const sp_typeinfo_&) BOOST_SP_NOEXCEPT { void* get_local_deleter(const sp_typeinfo_&)
BOOST_SP_NOEXCEPT BOOST_OVERRIDE {
return 0; return 0;
} }
virtual void* get_untyped_deleter() BOOST_SP_NOEXCEPT { void* get_untyped_deleter() BOOST_SP_NOEXCEPT BOOST_OVERRIDE {
return 0; return 0;
} }

View File

@@ -47,7 +47,7 @@ class bad_weak_ptr: public std::exception
{ {
public: public:
virtual char const * what() const BOOST_NOEXCEPT_OR_NOTHROW virtual char const * what() const BOOST_NOEXCEPT_OR_NOTHROW BOOST_OVERRIDE
{ {
return "tr1::bad_weak_ptr"; return "tr1::bad_weak_ptr";
} }

View File

@@ -113,12 +113,12 @@ public:
#endif #endif
virtual void local_cb_destroy() BOOST_SP_NOEXCEPT virtual void local_cb_destroy() BOOST_SP_NOEXCEPT BOOST_OVERRIDE
{ {
delete this; delete this;
} }
virtual boost::detail::shared_count local_cb_get_shared_count() const BOOST_SP_NOEXCEPT virtual boost::detail::shared_count local_cb_get_shared_count() const BOOST_SP_NOEXCEPT BOOST_OVERRIDE
{ {
return pn_; return pn_;
} }
@@ -130,12 +130,12 @@ public:
shared_count pn_; shared_count pn_;
virtual void local_cb_destroy() BOOST_SP_NOEXCEPT virtual void local_cb_destroy() BOOST_SP_NOEXCEPT BOOST_OVERRIDE
{ {
shared_count().swap( pn_ ); shared_count().swap( pn_ );
} }
virtual boost::detail::shared_count local_cb_get_shared_count() const BOOST_SP_NOEXCEPT virtual boost::detail::shared_count local_cb_get_shared_count() const BOOST_SP_NOEXCEPT BOOST_OVERRIDE
{ {
return pn_; return pn_;
} }

View File

@@ -26,6 +26,16 @@ namespace boost
namespace detail namespace detail
{ {
#if defined(__clang__)
# pragma clang diagnostic push
#endif
#if defined(__clang__) && defined(__has_warning)
# if __has_warning( "-Wc11-extensions" )
# pragma clang diagnostic ignored "-Wc11-extensions"
# endif
#endif
typedef _Atomic( boost::int_least32_t ) atomic_int_least32_t; typedef _Atomic( boost::int_least32_t ) atomic_int_least32_t;
inline void atomic_increment( atomic_int_least32_t * pw ) BOOST_SP_NOEXCEPT inline void atomic_increment( atomic_int_least32_t * pw ) BOOST_SP_NOEXCEPT
@@ -61,7 +71,6 @@ inline boost::int_least32_t atomic_conditional_increment( atomic_int_least32_t *
} }
#if defined(__clang__) #if defined(__clang__)
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wweak-vtables" # pragma clang diagnostic ignored "-Wweak-vtables"
#endif #endif

View File

@@ -85,7 +85,7 @@ public:
#endif #endif
} }
virtual void dispose() BOOST_SP_NOEXCEPT virtual void dispose() BOOST_SP_NOEXCEPT BOOST_OVERRIDE
{ {
#if defined(BOOST_SP_ENABLE_DEBUG_HOOKS) #if defined(BOOST_SP_ENABLE_DEBUG_HOOKS)
boost::sp_scalar_destructor_hook( px_, sizeof(X), this ); boost::sp_scalar_destructor_hook( px_, sizeof(X), this );
@@ -93,17 +93,17 @@ public:
boost::checked_delete( px_ ); boost::checked_delete( px_ );
} }
virtual void * get_deleter( sp_typeinfo_ const & ) BOOST_SP_NOEXCEPT virtual void * get_deleter( sp_typeinfo_ const & ) BOOST_SP_NOEXCEPT BOOST_OVERRIDE
{ {
return 0; return 0;
} }
virtual void * get_local_deleter( sp_typeinfo_ const & ) BOOST_SP_NOEXCEPT virtual void * get_local_deleter( sp_typeinfo_ const & ) BOOST_SP_NOEXCEPT BOOST_OVERRIDE
{ {
return 0; return 0;
} }
virtual void * get_untyped_deleter() BOOST_SP_NOEXCEPT virtual void * get_untyped_deleter() BOOST_SP_NOEXCEPT BOOST_OVERRIDE
{ {
return 0; return 0;
} }
@@ -168,22 +168,22 @@ public:
{ {
} }
virtual void dispose() BOOST_SP_NOEXCEPT virtual void dispose() BOOST_SP_NOEXCEPT BOOST_OVERRIDE
{ {
del( ptr ); del( ptr );
} }
virtual void * get_deleter( sp_typeinfo_ const & ti ) BOOST_SP_NOEXCEPT virtual void * get_deleter( sp_typeinfo_ const & ti ) BOOST_SP_NOEXCEPT BOOST_OVERRIDE
{ {
return ti == BOOST_SP_TYPEID_(D)? &reinterpret_cast<char&>( del ): 0; return ti == BOOST_SP_TYPEID_(D)? &reinterpret_cast<char&>( del ): 0;
} }
virtual void * get_local_deleter( sp_typeinfo_ const & ti ) BOOST_SP_NOEXCEPT virtual void * get_local_deleter( sp_typeinfo_ const & ti ) BOOST_SP_NOEXCEPT BOOST_OVERRIDE
{ {
return ti == BOOST_SP_TYPEID_(D)? boost::detail::get_local_deleter( boost::addressof( del ) ): 0; return ti == BOOST_SP_TYPEID_(D)? boost::detail::get_local_deleter( boost::addressof( del ) ): 0;
} }
virtual void * get_untyped_deleter() BOOST_SP_NOEXCEPT virtual void * get_untyped_deleter() BOOST_SP_NOEXCEPT BOOST_OVERRIDE
{ {
return &reinterpret_cast<char&>( del ); return &reinterpret_cast<char&>( del );
} }

View File

@@ -359,3 +359,10 @@ run wp_guides_test.cpp ;
compile-fail shared_from_fail.cpp ; compile-fail shared_from_fail.cpp ;
compile-fail weak_from_fail.cpp ; compile-fail weak_from_fail.cpp ;
compile sp_override_test.cpp ;
compile sp_pedantic_test.cpp
: <warnings>pedantic
<toolset>msvc:<warnings-as-errors>on
<toolset>gcc:<warnings-as-errors>on
<toolset>clang:<warnings-as-errors>on ;

18
test/sp_override_test.cpp Normal file
View File

@@ -0,0 +1,18 @@
// Copyright 2020 Peter Dimov
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
#if defined(__GNUC__) && __GNUC__ >= 5 && __cplusplus >= 201103L
# pragma GCC diagnostic error "-Wsuggest-override"
#endif
#include <boost/smart_ptr.hpp>
int main()
{
boost::shared_ptr<int> p1( new int );
boost::shared_ptr<int[]> p2( new int[1] );
boost::make_shared<int>();
boost::make_shared<int[]>( 1 );
}

14
test/sp_pedantic_test.cpp Normal file
View File

@@ -0,0 +1,14 @@
// Copyright 2020 Peter Dimov
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
#include <boost/smart_ptr.hpp>
int main()
{
boost::shared_ptr<int> p1( new int );
boost::shared_ptr<int[]> p2( new int[1] );
boost::make_shared<int>();
boost::make_shared<int[]>( 1 );
}