Merge pull request #348 from arvidn/debug-pedantic

enable _GLIBCXX_DEBUG_PEDANTIC
This commit is contained in:
Arvid Norberg 2016-02-21 11:30:08 -05:00
commit 10e547529f
10 changed files with 69 additions and 38 deletions

View File

@ -482,7 +482,8 @@ feature.compose <deprecated-functions>off : <define>TORRENT_NO_DEPRECATE ;
feature boost-link : default static shared : propagated composite ; feature boost-link : default static shared : propagated composite ;
feature debug-iterators : off on : composite propagated link-incompatible ; feature debug-iterators : off on : composite propagated link-incompatible ;
feature.compose <debug-iterators>on : <define>_SCL_SECURE=1 <define>_GLIBCXX_DEBUG ; feature.compose <debug-iterators>on : <define>_SCL_SECURE=1 <define>_GLIBCXX_DEBUG
<define>_GLIBCXX_DEBUG_PEDANTIC ;
feature fpic : off on : composite propagated link-incompatible ; feature fpic : off on : composite propagated link-incompatible ;
feature.compose <fpic>on : <cflags>-fPIC ; feature.compose <fpic>on : <cflags>-fPIC ;

View File

@ -96,6 +96,10 @@ POSSIBILITY OF SUCH DAMAGE.
#if defined __GNUC__ #if defined __GNUC__
#ifdef _GLIBCXX_CONCEPT_CHECKS
#define TORRENT_COMPLETE_TYPES_REQUIRED 1
#endif
// deprecation markup is only enabled when libtorrent // deprecation markup is only enabled when libtorrent
// headers are included by clients, not while building // headers are included by clients, not while building
// libtorrent itself // libtorrent itself
@ -112,6 +116,8 @@ POSSIBILITY OF SUCH DAMAGE.
// seem to allow boost::array in unions // seem to allow boost::array in unions
#define TORRENT_BROKEN_UNIONS 1 #define TORRENT_BROKEN_UNIONS 1
#define TORRENT_COMPLETE_TYPES_REQUIRED 1
// ======= MSVC ========= // ======= MSVC =========
#elif defined BOOST_MSVC #elif defined BOOST_MSVC
@ -124,6 +130,10 @@ POSSIBILITY OF SUCH DAMAGE.
// '_vsnprintf': This function or variable may be unsafe // '_vsnprintf': This function or variable may be unsafe
#pragma warning(disable:4996) #pragma warning(disable:4996)
#if (defined(_MSC_VER) && _MSC_VER < 1310)
#define TORRENT_COMPLETE_TYPES_REQUIRED 1
#endif
// deprecation markup is only enabled when libtorrent // deprecation markup is only enabled when libtorrent
// headers are included by clients, not while building // headers are included by clients, not while building
// libtorrent itself // libtorrent itself
@ -300,7 +310,6 @@ POSSIBILITY OF SUCH DAMAGE.
// ==== SOLARIS === // ==== SOLARIS ===
#elif defined sun || defined __sun #elif defined sun || defined __sun
#define TORRENT_SOLARIS #define TORRENT_SOLARIS
#define TORRENT_COMPLETE_TYPES_REQUIRED 1
#define TORRENT_USE_IFCONF 1 #define TORRENT_USE_IFCONF 1
#define TORRENT_HAS_SALEN 0 #define TORRENT_HAS_SALEN 0
#define TORRENT_HAS_SEM_RELTIMEDWAIT 1 #define TORRENT_HAS_SEM_RELTIMEDWAIT 1

View File

@ -150,14 +150,14 @@ namespace libtorrent
// copies the structure of the right hand side into this // copies the structure of the right hand side into this
// entry. // entry.
#ifndef TORRENT_NO_DEPRECATE #ifndef TORRENT_NO_DEPRECATE
void operator=(lazy_entry const&); entry& operator=(lazy_entry const&);
#endif #endif
void operator=(bdecode_node const&); entry& operator=(bdecode_node const&);
void operator=(entry const&); entry& operator=(entry const&);
void operator=(dictionary_type const&); entry& operator=(dictionary_type const&);
void operator=(string_type const&); entry& operator=(string_type const&);
void operator=(list_type const&); entry& operator=(list_type const&);
void operator=(integer_type const&); entry& operator=(integer_type const&);
// The ``integer()``, ``string()``, ``list()`` and ``dict()`` functions // The ``integer()``, ``string()``, ``list()`` and ``dict()`` functions
// are accessors that return the respective type. If the ``entry`` object // are accessors that return the respective type. If the ``entry`` object
@ -261,7 +261,7 @@ namespace libtorrent
void to_string_impl(std::string& out, int indent) const; void to_string_impl(std::string& out, int indent) const;
#if (defined(_MSC_VER) && _MSC_VER < 1310) || TORRENT_COMPLETE_TYPES_REQUIRED #if TORRENT_COMPLETE_TYPES_REQUIRED
// workaround for msvc-bug. // workaround for msvc-bug.
// assumes sizeof(map<string, char>) == sizeof(map<string, entry>) // assumes sizeof(map<string, char>) == sizeof(map<string, entry>)
// and sizeof(list<char>) == sizeof(list<entry>) // and sizeof(list<char>) == sizeof(list<entry>)

View File

@ -659,8 +659,8 @@ namespace libtorrent
peer_iterator begin() { return m_connections.begin(); } peer_iterator begin() { return m_connections.begin(); }
peer_iterator end() { return m_connections.end(); } peer_iterator end() { return m_connections.end(); }
void get_full_peer_list(std::vector<peer_list_entry>& v) const; void get_full_peer_list(std::vector<peer_list_entry>* v) const;
void get_peer_info(std::vector<peer_info>& v); void get_peer_info(std::vector<peer_info>* v);
void get_download_queue(std::vector<partial_piece_info>* queue) const; void get_download_queue(std::vector<partial_piece_info>* queue) const;
void refresh_explicit_cache(int cache_size); void refresh_explicit_cache(int cache_size);

View File

@ -52,6 +52,10 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/sha1_hash.hpp" #include "libtorrent/sha1_hash.hpp"
#include "libtorrent/file_storage.hpp" #include "libtorrent/file_storage.hpp"
#if TORRENT_COMPLETE_TYPES_REQUIRED
#include "libtorrent/announce_entry.hpp"
#endif
namespace libtorrent namespace libtorrent
{ {
class peer_connection; class peer_connection;

View File

@ -203,20 +203,17 @@ namespace libtorrent
ipv4_peer(ipv4_peer const& p); ipv4_peer(ipv4_peer const& p);
address_v4 addr; address_v4 addr;
private:
ipv4_peer& operator=(ipv4_peer const&);
}; };
#if TORRENT_USE_I2P #if TORRENT_USE_I2P
struct TORRENT_EXTRA_EXPORT i2p_peer : torrent_peer struct TORRENT_EXTRA_EXPORT i2p_peer : torrent_peer
{ {
i2p_peer(char const* destination, bool connectable, int src); i2p_peer(char const* destination, bool connectable, int src);
i2p_peer(const i2p_peer&);
~i2p_peer(); ~i2p_peer();
i2p_peer& operator=(i2p_peer const&);
char* destination; char* destination;
private:
i2p_peer(const i2p_peer&);
i2p_peer& operator=(i2p_peer const&);
}; };
#endif #endif
@ -226,10 +223,6 @@ namespace libtorrent
ipv6_peer(tcp::endpoint const& ip, bool connectable, int src); ipv6_peer(tcp::endpoint const& ip, bool connectable, int src);
const address_v6::bytes_type addr; const address_v6::bytes_type addr;
private:
// explicitly disallow assignment, to silence msvc warning
ipv6_peer& operator=(ipv6_peer const&);
ipv6_peer(ipv6_peer const&);
}; };
#endif #endif

View File

@ -156,10 +156,11 @@ namespace libtorrent
entry::~entry() { destruct(); } entry::~entry() { destruct(); }
void entry::operator=(const entry& e) entry& entry::operator=(const entry& e)
{ {
destruct(); destruct();
copy(e); copy(e);
return *this;
} }
entry::integer_type& entry::integer() entry::integer_type& entry::integer()
@ -321,7 +322,7 @@ namespace libtorrent
} }
// convert a bdecode_node into an old skool entry // convert a bdecode_node into an old skool entry
void entry::operator=(bdecode_node const& e) entry& entry::operator=(bdecode_node const& e)
{ {
switch (e.type()) switch (e.type())
{ {
@ -355,11 +356,12 @@ namespace libtorrent
destruct(); destruct();
break; break;
} }
return *this;
} }
#ifndef TORRENT_NO_DEPRECATE #ifndef TORRENT_NO_DEPRECATE
// convert a lazy_entry into an old skool entry // convert a lazy_entry into an old skool entry
void entry::operator=(lazy_entry const& e) entry& entry::operator=(lazy_entry const& e)
{ {
switch (e.type()) switch (e.type())
{ {
@ -393,10 +395,11 @@ namespace libtorrent
destruct(); destruct();
break; break;
} }
return *this;
} }
#endif #endif
void entry::operator=(dictionary_type const& v) entry& entry::operator=(dictionary_type const& v)
{ {
destruct(); destruct();
new(data) dictionary_type(v); new(data) dictionary_type(v);
@ -404,9 +407,10 @@ namespace libtorrent
#ifdef TORRENT_DEBUG #ifdef TORRENT_DEBUG
m_type_queried = true; m_type_queried = true;
#endif #endif
return *this;
} }
void entry::operator=(string_type const& v) entry& entry::operator=(string_type const& v)
{ {
destruct(); destruct();
new(data) string_type(v); new(data) string_type(v);
@ -414,9 +418,10 @@ namespace libtorrent
#ifdef TORRENT_DEBUG #ifdef TORRENT_DEBUG
m_type_queried = true; m_type_queried = true;
#endif #endif
return *this;
} }
void entry::operator=(list_type const& v) entry& entry::operator=(list_type const& v)
{ {
destruct(); destruct();
new(data) list_type(v); new(data) list_type(v);
@ -424,9 +429,10 @@ namespace libtorrent
#ifdef TORRENT_DEBUG #ifdef TORRENT_DEBUG
m_type_queried = true; m_type_queried = true;
#endif #endif
return *this;
} }
void entry::operator=(integer_type const& v) entry& entry::operator=(integer_type const& v)
{ {
destruct(); destruct();
new(data) integer_type(v); new(data) integer_type(v);
@ -434,6 +440,7 @@ namespace libtorrent
#ifdef TORRENT_DEBUG #ifdef TORRENT_DEBUG
m_type_queried = true; m_type_queried = true;
#endif #endif
return *this;
} }
bool entry::operator==(entry const& e) const bool entry::operator==(entry const& e) const

View File

@ -7079,12 +7079,12 @@ namespace libtorrent
} }
} }
void torrent::get_full_peer_list(std::vector<peer_list_entry>& v) const void torrent::get_full_peer_list(std::vector<peer_list_entry>* v) const
{ {
v.clear(); v->clear();
if (!m_peer_list) return; if (!m_peer_list) return;
v.reserve(m_peer_list->num_peers()); v->reserve(m_peer_list->num_peers());
for (peer_list::const_iterator i = m_peer_list->begin_peer(); for (peer_list::const_iterator i = m_peer_list->begin_peer();
i != m_peer_list->end_peer(); ++i) i != m_peer_list->end_peer(); ++i)
{ {
@ -7093,13 +7093,13 @@ namespace libtorrent
e.flags = (*i)->banned ? peer_list_entry::banned : 0; e.flags = (*i)->banned ? peer_list_entry::banned : 0;
e.failcount = (*i)->failcount; e.failcount = (*i)->failcount;
e.source = (*i)->source; e.source = (*i)->source;
v.push_back(e); v->push_back(e);
} }
} }
void torrent::get_peer_info(std::vector<peer_info>& v) void torrent::get_peer_info(std::vector<peer_info>* v)
{ {
v.clear(); v->clear();
for (peer_iterator i = begin(); for (peer_iterator i = begin();
i != end(); ++i) i != end(); ++i)
{ {
@ -7110,8 +7110,8 @@ namespace libtorrent
// not be included in this list // not be included in this list
if (peer->associated_torrent().expired()) continue; if (peer->associated_torrent().expired()) continue;
v.push_back(peer_info()); v->push_back(peer_info());
peer_info& p = v.back(); peer_info& p = v->back();
peer->get_peer_info(p); peer->get_peer_info(p);
#ifndef TORRENT_NO_DEPRECATE #ifndef TORRENT_NO_DEPRECATE

View File

@ -59,6 +59,10 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/thread.hpp" #include "libtorrent/thread.hpp"
#include "libtorrent/announce_entry.hpp" #include "libtorrent/announce_entry.hpp"
#if TORRENT_COMPLETE_TYPES_REQUIRED
#include "libtorrent/peer_info.hpp" // for peer_list_entry
#endif
#ifdef __GNUC__ #ifdef __GNUC__
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-macros" #pragma GCC diagnostic ignored "-Wunused-macros"
@ -818,12 +822,12 @@ namespace libtorrent
void torrent_handle::get_full_peer_list(std::vector<peer_list_entry>& v) const void torrent_handle::get_full_peer_list(std::vector<peer_list_entry>& v) const
{ {
TORRENT_SYNC_CALL1(get_full_peer_list, boost::ref(v)); TORRENT_SYNC_CALL1(get_full_peer_list, &v);
} }
void torrent_handle::get_peer_info(std::vector<peer_info>& v) const void torrent_handle::get_peer_info(std::vector<peer_info>& v) const
{ {
TORRENT_SYNC_CALL1(get_peer_info, boost::ref(v)); TORRENT_SYNC_CALL1(get_peer_info, &v);
} }
void torrent_handle::get_download_queue(std::vector<partial_piece_info>& queue) const void torrent_handle::get_download_queue(std::vector<partial_piece_info>& queue) const

View File

@ -259,6 +259,19 @@ namespace libtorrent
i2p_peer::~i2p_peer() i2p_peer::~i2p_peer()
{ free(destination); } { free(destination); }
i2p_peer::i2p_peer(const i2p_peer& rhs)
: torrent_peer(rhs.port, rhs.connectable, rhs.source)
, destination(allocate_string_copy(rhs.destination))
{}
i2p_peer& i2p_peer::operator=(i2p_peer const& rhs)
{
char* tmp = allocate_string_copy(rhs.destination);
free(destination);
destination = tmp;
return *this;
}
#endif // TORRENT_USE_I2P #endif // TORRENT_USE_I2P
#if TORRENT_USE_IPV6 #if TORRENT_USE_IPV6