Address results of PVS-Studio static analysis

Couple are left un-addressed, see #958 for details.
This commit is contained in:
Martin Hořeňovský
2017-07-20 00:27:28 +02:00
parent 2a586437e8
commit 87a66b8479
24 changed files with 21335 additions and 38 deletions

View File

@@ -48,7 +48,7 @@ namespace Catch {
char const * macroName = nullptr;
SourceLineInfo lineInfo;
char const * capturedExpression = nullptr;
ResultDisposition::Flags resultDisposition;
ResultDisposition::Flags resultDisposition = ResultDisposition::Normal;
};
struct AssertionResultData

View File

@@ -17,7 +17,7 @@ namespace Catch {
namespace {
struct IColourImpl {
virtual ~IColourImpl() {}
virtual ~IColourImpl() = default;
virtual void use( Colour::Code _colourCode ) = 0;
};
@@ -178,8 +178,14 @@ namespace Catch {
namespace Catch {
Colour::Colour( Code _colourCode ) : m_moved( false ) { use( _colourCode ); }
Colour::Colour( Colour const& _other ) : m_moved( false ) { const_cast<Colour&>( _other ).m_moved = true; }
Colour::Colour( Code _colourCode ) { use( _colourCode ); }
Colour::Colour( Colour&& _other ) { const_cast<Colour&>( _other ).m_moved = true; }
Colour& Colour::operator=( Colour&& _other ) {
m_moved = false;
const_cast<Colour&>( _other ).m_moved = true;
return *this;
}
Colour::~Colour(){ if( !m_moved ) use( None ); }
void Colour::use( Code _colourCode ) {

View File

@@ -50,14 +50,15 @@ namespace Catch {
// Use constructed object for RAII guard
Colour( Code _colourCode );
Colour( Colour const& other );
Colour( Colour&& other );
Colour& operator=( Colour&& other );
~Colour();
// Use static method for one-shot changes
static void use( Code _colourCode );
private:
bool m_moved;
bool m_moved = false;
};
std::ostream& operator << ( std::ostream& os, Colour const& );

View File

@@ -27,7 +27,8 @@ class ExpressionLhs : public DecomposedExpression {
public:
ExpressionLhs( ResultBuilder& rb, T lhs ) : m_rb( rb ), m_lhs( lhs ) {}
ExpressionLhs& operator = ( const ExpressionLhs& );
ExpressionLhs( ExpressionLhs const& ) = default;
ExpressionLhs& operator = ( const ExpressionLhs& ) = delete;
template<typename RhsT>
BinaryExpression<T, Internal::IsEqualTo, RhsT const&>
@@ -107,7 +108,8 @@ public:
BinaryExpression( ResultBuilder& rb, LhsT lhs, RhsT rhs )
: m_rb( rb ), m_lhs( lhs ), m_rhs( rhs ) {}
BinaryExpression& operator = ( BinaryExpression& );
BinaryExpression( BinaryExpression const& ) = default;
BinaryExpression& operator = ( BinaryExpression const& ) = delete;
void endExpression() const {
m_rb

View File

@@ -58,7 +58,6 @@ namespace Catch {
IRunner::~IRunner() {}
IMutableContext::~IMutableContext() {}
IConfig::~IConfig() {}
Matchers::Impl::MatcherUntypedBase::~MatcherUntypedBase() {}
void Config::dummy() {}
}

View File

@@ -0,0 +1,26 @@
/*
* Created by Phil Nash on 19/07/2017.
*
* Distributed under the Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
*/
#include "catch_matchers.hpp"
namespace Catch {
namespace Matchers {
namespace Impl {
std::string MatcherUntypedBase::toString() const {
if( m_cachedToString.empty() )
m_cachedToString = describe();
return m_cachedToString;
}
} // namespace Impl
} // namespace Matchers
using namespace Matchers;
using Matchers::Impl::MatcherBase;
} // namespace Catch

View File

@@ -22,18 +22,15 @@ namespace Matchers {
class MatcherUntypedBase {
public:
std::string toString() const {
if( m_cachedToString.empty() )
m_cachedToString = describe();
return m_cachedToString;
}
MatcherUntypedBase() = default;
MatcherUntypedBase ( MatcherUntypedBase const& ) = default;
MatcherUntypedBase& operator = ( MatcherUntypedBase const& ) = delete;
std::string toString() const;
protected:
virtual ~MatcherUntypedBase();
virtual ~MatcherUntypedBase() = default;
virtual std::string describe() const = 0;
mutable std::string m_cachedToString;
private:
MatcherUntypedBase& operator = ( MatcherUntypedBase const& );
};
template<typename ObjectT>

View File

@@ -48,9 +48,6 @@ namespace Catch {
m_info.message = builder.m_stream.str();
getResultCapture().pushScopedMessage( m_info );
}
ScopedMessage::ScopedMessage( ScopedMessage const& other )
: m_info( other.m_info )
{}
ScopedMessage::~ScopedMessage() {
if ( !std::uncaught_exception() ){

View File

@@ -49,7 +49,6 @@ namespace Catch {
class ScopedMessage {
public:
ScopedMessage( MessageBuilder const& builder );
ScopedMessage( ScopedMessage const& other );
~ScopedMessage();
MessageInfo m_info;

View File

@@ -16,9 +16,8 @@ namespace Catch {
{
public:
NotImplementedException( SourceLineInfo const& lineInfo );
NotImplementedException( NotImplementedException const& ) {}
virtual ~NotImplementedException() noexcept {}
virtual ~NotImplementedException() noexcept = default;
virtual const char* what() const noexcept;

View File

@@ -20,14 +20,14 @@ namespace Catch {
class TestSpecParser {
enum Mode{ None, Name, QuotedName, Tag, EscapedName };
Mode m_mode;
bool m_exclusion;
std::size_t m_start, m_pos;
Mode m_mode = None;
bool m_exclusion = false;
std::size_t m_start = std::string::npos, m_pos = 0;
std::string m_arg;
std::vector<std::size_t> m_escapeChars;
TestSpec::Filter m_currentFilter;
TestSpec m_testSpec;
ITagAliasRegistry const* m_tagAliases;
ITagAliasRegistry const* m_tagAliases = nullptr;
public:
TestSpecParser( ITagAliasRegistry const& tagAliases );

View File

@@ -36,7 +36,7 @@ namespace Catch {
return os;
}
Version libraryVersion() {
Version const& libraryVersion() {
static Version version( 2, 0, 0, "develop", 1 );
return version;
}

View File

@@ -14,6 +14,8 @@ namespace Catch {
// Versioning information
struct Version {
Version( Version const& ) = delete;
Version& operator=( Version const& ) = delete;
Version( unsigned int _majorVersion,
unsigned int _minorVersion,
unsigned int _patchNumber,
@@ -29,12 +31,9 @@ namespace Catch {
unsigned int const buildNumber;
friend std::ostream& operator << ( std::ostream& os, Version const& version );
private:
void operator=( Version const& );
};
Version libraryVersion();
Version const& libraryVersion();
}
#endif // TWOBLUECUBES_CATCH_VERSION_H_INCLUDED

View File

@@ -65,10 +65,19 @@ namespace Catch {
: m_writer( writer )
{}
XmlWriter::ScopedElement::ScopedElement( ScopedElement const& other )
XmlWriter::ScopedElement::ScopedElement( ScopedElement&& other )
: m_writer( other.m_writer ){
other.m_writer = nullptr;
}
XmlWriter::ScopedElement& XmlWriter::ScopedElement::operator=( ScopedElement&& other ) {
if ( m_writer ) {
m_writer->endElement();
}
m_writer = other.m_writer;
other.m_writer = nullptr;
return *this;
}
XmlWriter::ScopedElement::~ScopedElement() {
if( m_writer )

View File

@@ -38,7 +38,8 @@ namespace Catch {
public:
ScopedElement( XmlWriter* writer );
ScopedElement( ScopedElement const& other );
ScopedElement( ScopedElement&& other );
ScopedElement& operator=( ScopedElement&& other );
~ScopedElement();
@@ -51,7 +52,7 @@ namespace Catch {
}
private:
mutable XmlWriter* m_writer;
mutable XmlWriter* m_writer = nullptr;
};
XmlWriter( std::ostream& os = Catch::cout() );

View File

@@ -68,8 +68,9 @@ namespace Catch {
private:
class AssertionPrinter {
void operator= ( AssertionPrinter const& );
public:
AssertionPrinter& operator= ( AssertionPrinter const& ) = delete;
AssertionPrinter( AssertionPrinter const& ) = delete;
AssertionPrinter( std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages )
: stream( _stream )
, stats( _stats )

View File

@@ -97,8 +97,9 @@ namespace Catch {
private:
class AssertionPrinter {
void operator= ( AssertionPrinter const& );
public:
AssertionPrinter& operator= ( AssertionPrinter const& ) = delete;
AssertionPrinter( AssertionPrinter const& ) = delete;
AssertionPrinter( std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages )
: stream( _stream ),
stats( _stats ),

View File

@@ -61,8 +61,9 @@ namespace Catch {
private:
size_t counter = 0;
class AssertionPrinter {
void operator= ( AssertionPrinter const& );
public:
AssertionPrinter& operator= ( AssertionPrinter const& ) = delete;
AssertionPrinter( AssertionPrinter const& ) = delete;
AssertionPrinter( std::ostream& _stream, AssertionStats const& _stats, size_t counter )
: stream( _stream )
, stats( _stats )