Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/miloyip/rapidjson.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilo Yip <miloyip@gmail.com>2016-04-06 19:44:58 +0300
committerMilo Yip <miloyip@gmail.com>2016-04-06 19:44:58 +0300
commit795946b1ca2ff554804e6f4cedef5a55cb370241 (patch)
treedd0ad2af94a65ca024b29298fe62f5be762213ac
parent62a9a6b0d8ade710309fc1172cf521c6f97ba88a (diff)
parent12425693ba255b8b8d68ba8ce752a23a25c2118f (diff)
Merge pull request #595 from miloyip/vcwarning
Fix VC warnings
-rw-r--r--CMakeLists.txt1
-rw-r--r--appveyor.yml2
-rw-r--r--example/CMakeLists.txt2
-rw-r--r--include/rapidjson/document.h5
-rw-r--r--include/rapidjson/encodedstream.h4
-rw-r--r--include/rapidjson/internal/regex.h9
-rw-r--r--include/rapidjson/pointer.h9
-rw-r--r--include/rapidjson/schema.h12
-rw-r--r--test/unittest/CMakeLists.txt22
-rw-r--r--test/unittest/documenttest.cpp40
-rw-r--r--test/unittest/istreamwrappertest.cpp11
-rw-r--r--test/unittest/readertest.cpp2
-rw-r--r--test/unittest/unittest.cpp1
-rw-r--r--test/unittest/valuetest.cpp10
14 files changed, 94 insertions, 36 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fa2bdcfe..6bdf4841 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -54,6 +54,7 @@ elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
endif()
#add extra search paths for libraries and includes
diff --git a/appveyor.yml b/appveyor.yml
index 13d8b94d..205c670d 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -30,7 +30,7 @@ environment:
before_build:
- git submodule update --init --recursive
-- cmake -H. -BBuild/VS -G "Visual Studio %VS_VERSION%" -DCMAKE_GENERATOR_PLATFORM=%VS_PLATFORM% -DBUILD_SHARED_LIBS=true -Wno-dev
+- cmake -H. -BBuild/VS -G "Visual Studio %VS_VERSION%" -DCMAKE_GENERATOR_PLATFORM=%VS_PLATFORM% -DCMAKE_VERBOSE_MAKEFILE=ON -DBUILD_SHARED_LIBS=true -Wno-dev
build:
project: Build\VS\RapidJSON.sln
diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt
index 8c546cf7..6da18dfc 100644
--- a/example/CMakeLists.txt
+++ b/example/CMakeLists.txt
@@ -23,8 +23,6 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -Werror -Wall -Wextra -Weffc++ -Wswitch-default")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything")
-elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
- add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
endif()
foreach (example ${EXAMPLES})
diff --git a/include/rapidjson/document.h b/include/rapidjson/document.h
index e1b1fbcb..d286eb1e 100644
--- a/include/rapidjson/document.h
+++ b/include/rapidjson/document.h
@@ -27,6 +27,7 @@
#ifdef _MSC_VER
RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant
+RAPIDJSON_DIAG_OFF(4244) // conversion from kXxxFlags to 'uint16_t', possible loss of data
#endif
#ifdef __clang__
@@ -311,6 +312,10 @@ struct GenericStringRef {
GenericStringRef(const CharType* str, SizeType len)
: s(str), length(len) { RAPIDJSON_ASSERT(s != 0); }
+ GenericStringRef(const GenericStringRef& rhs) : s(rhs.s), length(rhs.length) {}
+
+ GenericStringRef& operator=(const GenericStringRef& rhs) { s = rhs.s; length = rhs.length; }
+
//! implicit conversion to plain CharType pointer
operator const Ch *() const { return s; }
diff --git a/include/rapidjson/encodedstream.h b/include/rapidjson/encodedstream.h
index c402e5c3..14506838 100644
--- a/include/rapidjson/encodedstream.h
+++ b/include/rapidjson/encodedstream.h
@@ -85,6 +85,10 @@ public:
size_t PutEnd(Ch*) { return 0; }
MemoryStream& is_;
+
+private:
+ EncodedInputStream(const EncodedInputStream&);
+ EncodedInputStream& operator=(const EncodedInputStream&);
};
//! Output byte stream wrapper with statically bound encoding.
diff --git a/include/rapidjson/internal/regex.h b/include/rapidjson/internal/regex.h
index aeb0e3ef..d317daa3 100644
--- a/include/rapidjson/internal/regex.h
+++ b/include/rapidjson/internal/regex.h
@@ -31,6 +31,11 @@ RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(effc++)
#endif
+#ifdef _MSC_VER
+RAPIDJSON_DIAG_PUSH
+RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
+#endif
+
#ifndef RAPIDJSON_REGEX_VERBOSE
#define RAPIDJSON_REGEX_VERBOSE 0
#endif
@@ -693,4 +698,8 @@ RAPIDJSON_NAMESPACE_END
RAPIDJSON_DIAG_POP
#endif
+#ifdef _MSC_VER
+RAPIDJSON_DIAG_POP
+#endif
+
#endif // RAPIDJSON_INTERNAL_REGEX_H_
diff --git a/include/rapidjson/pointer.h b/include/rapidjson/pointer.h
index 94449381..c9852779 100644
--- a/include/rapidjson/pointer.h
+++ b/include/rapidjson/pointer.h
@@ -23,6 +23,11 @@ RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(switch-enum)
#endif
+#ifdef _MSC_VER
+RAPIDJSON_DIAG_PUSH
+RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
+#endif
+
RAPIDJSON_NAMESPACE_BEGIN
static const SizeType kPointerInvalidIndex = ~SizeType(0); //!< Represents an invalid index in GenericPointer::Token
@@ -1342,4 +1347,8 @@ RAPIDJSON_NAMESPACE_END
RAPIDJSON_DIAG_POP
#endif
+#ifdef _MSC_VER
+RAPIDJSON_DIAG_POP
+#endif
+
#endif // RAPIDJSON_POINTER_H_
diff --git a/include/rapidjson/schema.h b/include/rapidjson/schema.h
index 26da8a6b..e12e7d2d 100644
--- a/include/rapidjson/schema.h
+++ b/include/rapidjson/schema.h
@@ -68,6 +68,11 @@ RAPIDJSON_DIAG_PUSH
RAPIDJSON_DIAG_OFF(variadic-macros)
#endif
+#ifdef _MSC_VER
+RAPIDJSON_DIAG_PUSH
+RAPIDJSON_DIAG_OFF(4512) // assignment operator could not be generated
+#endif
+
RAPIDJSON_NAMESPACE_BEGIN
///////////////////////////////////////////////////////////////////////////////
@@ -1963,7 +1968,8 @@ public:
GenericSchemaValidator<SchemaDocumentType, Handler> validator(sd_, handler);
parseResult_ = reader.template Parse<parseFlags>(is_, validator);
- if ((isValid_ = validator.IsValid())) {
+ isValid_ = validator.IsValid();
+ if (isValid_) {
invalidSchemaPointer_ = PointerType();
invalidSchemaKeyword_ = 0;
invalidDocumentPointer_ = PointerType();
@@ -2004,4 +2010,8 @@ RAPIDJSON_DIAG_POP
RAPIDJSON_DIAG_POP
#endif
+#ifdef _MSC_VER
+RAPIDJSON_DIAG_POP
+#endif
+
#endif // RAPIDJSON_SCHEMA_H_
diff --git a/test/unittest/CMakeLists.txt b/test/unittest/CMakeLists.txt
index 3f76a4f3..3630cfe9 100644
--- a/test/unittest/CMakeLists.txt
+++ b/test/unittest/CMakeLists.txt
@@ -38,13 +38,25 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -Wall -Wextra -Weffc++ -Wswitch-default -Wfloat-equal -Wimplicit-fallthrough -Weverything")
- # If the user is running a newer version of Clang that includes the
- # -Wdouble-promotion, we will ignore that warning.
- if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 3.7)
+ # If the user is running a newer version of Clang that includes the
+ # -Wdouble-promotion, we will ignore that warning.
+ if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 3.7)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-double-promotion")
- endif()
+ endif()
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
- add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
+ # Force to always compile with /W4
+ if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
+ string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ else()
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
+ endif()
+
+ # Force to always compile with /WX
+ if(CMAKE_CXX_FLAGS MATCHES "/WX-")
+ string(REGEX REPLACE "/WX-" "/WX" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ else()
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX")
+ endif()
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRAPIDJSON_HAS_STDSTRING=1")
diff --git a/test/unittest/documenttest.cpp b/test/unittest/documenttest.cpp
index 0c9ffaba..ecd4b79b 100644
--- a/test/unittest/documenttest.cpp
+++ b/test/unittest/documenttest.cpp
@@ -447,10 +447,10 @@ TYPED_TEST_CASE(DocumentMove, MoveAllocatorTypes);
TYPED_TEST(DocumentMove, MoveConstructor) {
typedef TypeParam Allocator;
- typedef GenericDocument<UTF8<>, Allocator> Document;
+ typedef GenericDocument<UTF8<>, Allocator> D;
Allocator allocator;
- Document a(&allocator);
+ D a(&allocator);
a.Parse("[\"one\", \"two\", \"three\"]");
EXPECT_FALSE(a.HasParseError());
EXPECT_TRUE(a.IsArray());
@@ -458,7 +458,7 @@ TYPED_TEST(DocumentMove, MoveConstructor) {
EXPECT_EQ(&a.GetAllocator(), &allocator);
// Document b(a); // does not compile (!is_copy_constructible)
- Document b(std::move(a));
+ D b(std::move(a));
EXPECT_TRUE(a.IsNull());
EXPECT_TRUE(b.IsArray());
EXPECT_EQ(3u, b.Size());
@@ -471,7 +471,7 @@ TYPED_TEST(DocumentMove, MoveConstructor) {
EXPECT_EQ(2u, b.MemberCount());
// Document c = a; // does not compile (!is_copy_constructible)
- Document c = std::move(b);
+ D c = std::move(b);
EXPECT_TRUE(b.IsNull());
EXPECT_TRUE(c.IsObject());
EXPECT_EQ(2u, c.MemberCount());
@@ -481,17 +481,17 @@ TYPED_TEST(DocumentMove, MoveConstructor) {
TYPED_TEST(DocumentMove, MoveConstructorParseError) {
typedef TypeParam Allocator;
- typedef GenericDocument<UTF8<>, Allocator> Document;
+ typedef GenericDocument<UTF8<>, Allocator> D;
ParseResult noError;
- Document a;
+ D a;
a.Parse("{ 4 = 4]");
ParseResult error(a.GetParseError(), a.GetErrorOffset());
EXPECT_TRUE(a.HasParseError());
EXPECT_NE(error.Code(), noError.Code());
EXPECT_NE(error.Offset(), noError.Offset());
- Document b(std::move(a));
+ D b(std::move(a));
EXPECT_FALSE(a.HasParseError());
EXPECT_TRUE(b.HasParseError());
EXPECT_EQ(a.GetParseError(), noError.Code());
@@ -499,7 +499,7 @@ TYPED_TEST(DocumentMove, MoveConstructorParseError) {
EXPECT_EQ(a.GetErrorOffset(), noError.Offset());
EXPECT_EQ(b.GetErrorOffset(), error.Offset());
- Document c(std::move(b));
+ D c(std::move(b));
EXPECT_FALSE(b.HasParseError());
EXPECT_TRUE(c.HasParseError());
EXPECT_EQ(b.GetParseError(), noError.Code());
@@ -540,10 +540,10 @@ TYPED_TEST(DocumentMove, MoveConstructorStack) {
TYPED_TEST(DocumentMove, MoveAssignment) {
typedef TypeParam Allocator;
- typedef GenericDocument<UTF8<>, Allocator> Document;
+ typedef GenericDocument<UTF8<>, Allocator> D;
Allocator allocator;
- Document a(&allocator);
+ D a(&allocator);
a.Parse("[\"one\", \"two\", \"three\"]");
EXPECT_FALSE(a.HasParseError());
EXPECT_TRUE(a.IsArray());
@@ -551,7 +551,7 @@ TYPED_TEST(DocumentMove, MoveAssignment) {
EXPECT_EQ(&a.GetAllocator(), &allocator);
// Document b; b = a; // does not compile (!is_copy_assignable)
- Document b;
+ D b;
b = std::move(a);
EXPECT_TRUE(a.IsNull());
EXPECT_TRUE(b.IsArray());
@@ -565,7 +565,7 @@ TYPED_TEST(DocumentMove, MoveAssignment) {
EXPECT_EQ(2u, b.MemberCount());
// Document c; c = a; // does not compile (see static_assert)
- Document c;
+ D c;
c = std::move(b);
EXPECT_TRUE(b.IsNull());
EXPECT_TRUE(c.IsObject());
@@ -576,17 +576,17 @@ TYPED_TEST(DocumentMove, MoveAssignment) {
TYPED_TEST(DocumentMove, MoveAssignmentParseError) {
typedef TypeParam Allocator;
- typedef GenericDocument<UTF8<>, Allocator> Document;
+ typedef GenericDocument<UTF8<>, Allocator> D;
ParseResult noError;
- Document a;
+ D a;
a.Parse("{ 4 = 4]");
ParseResult error(a.GetParseError(), a.GetErrorOffset());
EXPECT_TRUE(a.HasParseError());
EXPECT_NE(error.Code(), noError.Code());
EXPECT_NE(error.Offset(), noError.Offset());
- Document b;
+ D b;
b = std::move(a);
EXPECT_FALSE(a.HasParseError());
EXPECT_TRUE(b.HasParseError());
@@ -595,7 +595,7 @@ TYPED_TEST(DocumentMove, MoveAssignmentParseError) {
EXPECT_EQ(a.GetErrorOffset(), noError.Offset());
EXPECT_EQ(b.GetErrorOffset(), error.Offset());
- Document c;
+ D c;
c = std::move(b);
EXPECT_FALSE(b.HasParseError());
EXPECT_TRUE(c.HasParseError());
@@ -612,9 +612,9 @@ TYPED_TEST(DocumentMove, MoveAssignmentParseError) {
TYPED_TEST(DocumentMove, MoveAssignmentStack) {
typedef TypeParam Allocator;
typedef UTF8<> Encoding;
- typedef GenericDocument<Encoding, Allocator> Document;
+ typedef GenericDocument<Encoding, Allocator> D;
- Document a;
+ D a;
size_t defaultCapacity = a.GetStackCapacity();
// Trick Document into getting GetStackCapacity() to return non-zero
@@ -625,12 +625,12 @@ TYPED_TEST(DocumentMove, MoveAssignmentStack) {
size_t capacity = a.GetStackCapacity();
EXPECT_GT(capacity, 0u);
- Document b;
+ D b;
b = std::move(a);
EXPECT_EQ(a.GetStackCapacity(), defaultCapacity);
EXPECT_EQ(b.GetStackCapacity(), capacity);
- Document c;
+ D c;
c = std::move(b);
EXPECT_EQ(b.GetStackCapacity(), defaultCapacity);
EXPECT_EQ(c.GetStackCapacity(), capacity);
diff --git a/test/unittest/istreamwrappertest.cpp b/test/unittest/istreamwrappertest.cpp
index f6b0fa91..28c756cc 100644
--- a/test/unittest/istreamwrappertest.cpp
+++ b/test/unittest/istreamwrappertest.cpp
@@ -20,6 +20,11 @@
#include <sstream>
#include <fstream>
+#ifdef _MSC_VER
+RAPIDJSON_DIAG_PUSH
+RAPIDJSON_DIAG_OFF(4702) // unreachable code
+#endif
+
using namespace rapidjson;
using namespace std;
@@ -168,4 +173,8 @@ TEST(IStreamWrapper, wfstream) {
EXPECT_EQ(5, d.MemberCount());
}
-#endif // RAPIDJSON_HAS_CXX11_RVALUE_REFS
+#endif
+
+#ifdef _MSC_VER
+RAPIDJSON_DIAG_POP
+#endif
diff --git a/test/unittest/readertest.cpp b/test/unittest/readertest.cpp
index 3f11fec8..329af2a7 100644
--- a/test/unittest/readertest.cpp
+++ b/test/unittest/readertest.cpp
@@ -720,7 +720,7 @@ TEST(Reader, ParseString_Error) {
TEST_STRINGENCODING_ERROR(UTF32<>, UTF8<>, unsigned, ARRAY('[', '\"', 0x110000, '\"', ']', '\0'));
// Malform ASCII sequence
- TEST_STRINGENCODING_ERROR(ASCII<>, UTF8<>, char, ARRAY('[', '\"', char(0x80), '\"', ']', '\0'));
+ TEST_STRINGENCODING_ERROR(ASCII<>, UTF8<>, char, ARRAY('[', '\"', char(0x80u), '\"', ']', '\0'));
#undef ARRAY
#undef TEST_STRINGARRAY_ERROR
diff --git a/test/unittest/unittest.cpp b/test/unittest/unittest.cpp
index e0e8576e..b754563e 100644
--- a/test/unittest/unittest.cpp
+++ b/test/unittest/unittest.cpp
@@ -35,6 +35,7 @@ int main(int argc, char **argv) {
#ifdef _MSC_VER
_CrtMemState memoryState = { 0 };
+ (void)memoryState;
_CrtMemCheckpoint(&memoryState);
//_CrtSetBreakAlloc(X);
//void *testWhetherMemoryLeakDetectionWorks = malloc(1);
diff --git a/test/unittest/valuetest.cpp b/test/unittest/valuetest.cpp
index d6c7492d..aac0a441 100644
--- a/test/unittest/valuetest.cpp
+++ b/test/unittest/valuetest.cpp
@@ -94,23 +94,23 @@ TEST(Value, Traits) {
#endif
TEST(Value, MoveConstructor) {
- typedef GenericValue<UTF8<>, CrtAllocator> Value;
- Value::AllocatorType allocator;
+ typedef GenericValue<UTF8<>, CrtAllocator> V;
+ V::AllocatorType allocator;
- Value x((Value(kArrayType)));
+ V x((V(kArrayType)));
x.Reserve(4u, allocator);
x.PushBack(1, allocator).PushBack(2, allocator).PushBack(3, allocator).PushBack(4, allocator);
EXPECT_TRUE(x.IsArray());
EXPECT_EQ(4u, x.Size());
// Value y(x); // does not compile (!is_copy_constructible)
- Value y(std::move(x));
+ V y(std::move(x));
EXPECT_TRUE(x.IsNull());
EXPECT_TRUE(y.IsArray());
EXPECT_EQ(4u, y.Size());
// Value z = y; // does not compile (!is_copy_assignable)
- Value z = std::move(y);
+ V z = std::move(y);
EXPECT_TRUE(y.IsNull());
EXPECT_TRUE(z.IsArray());
EXPECT_EQ(4u, z.Size());