Merge pull request #2116 from nlohmann/issue2113
Fix warnings from Clang 10 and GCC 9
This commit is contained in:
		
						commit
						3799b3f8dd
					
				
					 8 changed files with 47 additions and 20 deletions
				
			
		
							
								
								
									
										14
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -102,7 +102,8 @@ doctest: | ||||||
| # -Wno-switch-enum -Wno-covered-switch-default: pedantic/contradicting warnings about switches
 | # -Wno-switch-enum -Wno-covered-switch-default: pedantic/contradicting warnings about switches
 | ||||||
| # -Wno-weak-vtables: exception class is defined inline, but has virtual method
 | # -Wno-weak-vtables: exception class is defined inline, but has virtual method
 | ||||||
| pedantic_clang: | pedantic_clang: | ||||||
| 	$(MAKE) json_unit CXX=c++ CXXFLAGS=" \
 | 	rm -fr build_pedantic | ||||||
|  | 	CXXFLAGS=" \
 | ||||||
| 		-std=c++11 -Wno-c++98-compat -Wno-c++98-compat-pedantic \
 | 		-std=c++11 -Wno-c++98-compat -Wno-c++98-compat-pedantic \
 | ||||||
| 		-Werror \
 | 		-Werror \
 | ||||||
| 		-Weverything \
 | 		-Weverything \
 | ||||||
|  | @ -115,11 +116,13 @@ pedantic_clang: | ||||||
| 		-Wno-padded \
 | 		-Wno-padded \
 | ||||||
| 		-Wno-range-loop-analysis \
 | 		-Wno-range-loop-analysis \
 | ||||||
| 		-Wno-switch-enum -Wno-covered-switch-default \
 | 		-Wno-switch-enum -Wno-covered-switch-default \
 | ||||||
| 		-Wno-weak-vtables"
 | 		-Wno-weak-vtables" cmake -S . -B build_pedantic -GNinja -DCMAKE_BUILD_TYPE=Debug -DJSON_MultipleHeaders=ON
 | ||||||
|  | 	cmake --build build_pedantic | ||||||
| 
 | 
 | ||||||
| # calling GCC with most warnings
 | # calling GCC with most warnings
 | ||||||
| pedantic_gcc: | pedantic_gcc: | ||||||
| 	$(MAKE) json_unit CXX=/usr/local/bin/g++-9 CXXFLAGS=" \
 | 	rm -fr build_pedantic | ||||||
|  | 	CXXFLAGS=" \
 | ||||||
| 		-std=c++11 \
 | 		-std=c++11 \
 | ||||||
| 		-Waddress \
 | 		-Waddress \
 | ||||||
| 		-Waddress-of-packed-member \
 | 		-Waddress-of-packed-member \
 | ||||||
|  | @ -233,7 +236,7 @@ pedantic_gcc: | ||||||
| 		-Wno-system-headers \
 | 		-Wno-system-headers \
 | ||||||
| 		-Wno-templates \
 | 		-Wno-templates \
 | ||||||
| 		-Wno-undef \
 | 		-Wno-undef \
 | ||||||
| 		-Wnoexcept \
 | 		-Wno-noexcept \
 | ||||||
| 		-Wnoexcept-type \
 | 		-Wnoexcept-type \
 | ||||||
| 		-Wnon-template-friend \
 | 		-Wnon-template-friend \
 | ||||||
| 		-Wnon-virtual-dtor \
 | 		-Wnon-virtual-dtor \
 | ||||||
|  | @ -340,7 +343,8 @@ pedantic_gcc: | ||||||
| 		-Wvolatile-register-var \
 | 		-Wvolatile-register-var \
 | ||||||
| 		-Wwrite-strings \
 | 		-Wwrite-strings \
 | ||||||
| 		-Wzero-as-null-pointer-constant \
 | 		-Wzero-as-null-pointer-constant \
 | ||||||
| 		"
 | 		" cmake -S . -B build_pedantic -GNinja -DCMAKE_BUILD_TYPE=Debug -DJSON_MultipleHeaders=ON
 | ||||||
|  | 	cmake --build build_pedantic | ||||||
| 
 | 
 | ||||||
| ##########################################################################
 | ##########################################################################
 | ||||||
| # benchmarks
 | # benchmarks
 | ||||||
|  |  | ||||||
|  | @ -32,7 +32,7 @@ namespace detail | ||||||
| 
 | 
 | ||||||
| @note from https://stackoverflow.com/a/1001328/266378
 | @note from https://stackoverflow.com/a/1001328/266378
 | ||||||
| */ | */ | ||||||
| static bool little_endianess(int num = 1) noexcept | static inline bool little_endianess(int num = 1) noexcept | ||||||
| { | { | ||||||
|     return *reinterpret_cast<char*>(&num) == 1; |     return *reinterpret_cast<char*>(&num) == 1; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -194,9 +194,9 @@ class binary_writer | ||||||
|                 } |                 } | ||||||
|                 else |                 else | ||||||
|                 { |                 { | ||||||
|                     if (j.m_value.number_float >= std::numeric_limits<float>::lowest() and |                     if (static_cast<double>(j.m_value.number_float) >= static_cast<double>(std::numeric_limits<float>::lowest()) and | ||||||
|                             j.m_value.number_float <= std::numeric_limits<float>::max() and |                             static_cast<double>(j.m_value.number_float) <= static_cast<double>(std::numeric_limits<float>::max()) and | ||||||
|                             static_cast<double>(static_cast<float>(j.m_value.number_float)) == j.m_value.number_float) |                             static_cast<double>(static_cast<float>(j.m_value.number_float)) == static_cast<double>(j.m_value.number_float)) | ||||||
|                     { |                     { | ||||||
|                         oa->write_character(get_cbor_float_prefix(static_cast<float>(j.m_value.number_float))); |                         oa->write_character(get_cbor_float_prefix(static_cast<float>(j.m_value.number_float))); | ||||||
|                         write_number(static_cast<float>(j.m_value.number_float)); |                         write_number(static_cast<float>(j.m_value.number_float)); | ||||||
|  |  | ||||||
|  | @ -5612,7 +5612,7 @@ namespace detail | ||||||
| 
 | 
 | ||||||
| @note from https://stackoverflow.com/a/1001328/266378
 | @note from https://stackoverflow.com/a/1001328/266378
 | ||||||
| */ | */ | ||||||
| static bool little_endianess(int num = 1) noexcept | static inline bool little_endianess(int num = 1) noexcept | ||||||
| { | { | ||||||
|     return *reinterpret_cast<char*>(&num) == 1; |     return *reinterpret_cast<char*>(&num) == 1; | ||||||
| } | } | ||||||
|  | @ -12205,9 +12205,9 @@ class binary_writer | ||||||
|                 } |                 } | ||||||
|                 else |                 else | ||||||
|                 { |                 { | ||||||
|                     if (j.m_value.number_float >= std::numeric_limits<float>::lowest() and |                     if (static_cast<double>(j.m_value.number_float) >= static_cast<double>(std::numeric_limits<float>::lowest()) and | ||||||
|                             j.m_value.number_float <= std::numeric_limits<float>::max() and |                             static_cast<double>(j.m_value.number_float) <= static_cast<double>(std::numeric_limits<float>::max()) and | ||||||
|                             static_cast<double>(static_cast<float>(j.m_value.number_float)) == j.m_value.number_float) |                             static_cast<double>(static_cast<float>(j.m_value.number_float)) == static_cast<double>(j.m_value.number_float)) | ||||||
|                     { |                     { | ||||||
|                         oa->write_character(get_cbor_float_prefix(static_cast<float>(j.m_value.number_float))); |                         oa->write_character(get_cbor_float_prefix(static_cast<float>(j.m_value.number_float))); | ||||||
|                         write_number(static_cast<float>(j.m_value.number_float)); |                         write_number(static_cast<float>(j.m_value.number_float)); | ||||||
|  |  | ||||||
|  | @ -939,7 +939,7 @@ TEST_CASE("CBOR") | ||||||
|                 } |                 } | ||||||
|                 SECTION("-3.40282e+38(lowest float)") |                 SECTION("-3.40282e+38(lowest float)") | ||||||
|                 { |                 { | ||||||
|                     double v = std::numeric_limits<float>::lowest(); |                     double v = static_cast<double>(std::numeric_limits<float>::lowest()); | ||||||
|                     json j = v; |                     json j = v; | ||||||
|                     std::vector<uint8_t> expected = |                     std::vector<uint8_t> expected = | ||||||
|                     { |                     { | ||||||
|  | @ -953,7 +953,7 @@ TEST_CASE("CBOR") | ||||||
|                 } |                 } | ||||||
|                 SECTION("1 + 3.40282e+38(more than max float)") |                 SECTION("1 + 3.40282e+38(more than max float)") | ||||||
|                 { |                 { | ||||||
|                     double v = std::numeric_limits<float>::max() + 0.1e+34; |                     double v = static_cast<double>(std::numeric_limits<float>::max()) + 0.1e+34; | ||||||
|                     json j = v; |                     json j = v; | ||||||
|                     std::vector<uint8_t> expected = |                     std::vector<uint8_t> expected = | ||||||
|                     { |                     { | ||||||
|  | @ -968,7 +968,7 @@ TEST_CASE("CBOR") | ||||||
|                 } |                 } | ||||||
|                 SECTION("-1 - 3.40282e+38(less than lowest float)") |                 SECTION("-1 - 3.40282e+38(less than lowest float)") | ||||||
|                 { |                 { | ||||||
|                     double v = std::numeric_limits<float>::lowest() - 1; |                     double v = static_cast<double>(std::numeric_limits<float>::lowest()) - 1.0; | ||||||
|                     json j = v; |                     json j = v; | ||||||
|                     std::vector<uint8_t> expected = |                     std::vector<uint8_t> expected = | ||||||
|                     { |                     { | ||||||
|  | @ -1582,7 +1582,7 @@ TEST_CASE("CBOR") | ||||||
|                 auto j = json::from_cbor(input); |                 auto j = json::from_cbor(input); | ||||||
|                 CHECK(j.is_binary()); |                 CHECK(j.is_binary()); | ||||||
|                 auto k = json::binary_array({0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x99}); |                 auto k = json::binary_array({0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x99}); | ||||||
|                 CAPTURE(j.dump(0, ' ', false, json::error_handler_t::strict, true)); |                 CAPTURE(j.dump(0, ' ', false, json::error_handler_t::strict, true)) | ||||||
|                 CHECK(j == k); |                 CHECK(j == k); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -46,7 +46,12 @@ void to_json(json&, pod) noexcept; | ||||||
| void to_json(json&, pod_bis); | void to_json(json&, pod_bis); | ||||||
| void from_json(const json&, pod) noexcept; | void from_json(const json&, pod) noexcept; | ||||||
| void from_json(const json&, pod_bis); | void from_json(const json&, pod_bis); | ||||||
| static json* j; | void to_json(json&, pod) noexcept {} | ||||||
|  | void to_json(json&, pod_bis) {} | ||||||
|  | void from_json(const json&, pod) noexcept {} | ||||||
|  | void from_json(const json&, pod_bis) {} | ||||||
|  | 
 | ||||||
|  | static json* j = nullptr; | ||||||
| 
 | 
 | ||||||
| static_assert(noexcept(json{}), ""); | static_assert(noexcept(json{}), ""); | ||||||
| static_assert(noexcept(nlohmann::to_json(*j, 2)), ""); | static_assert(noexcept(nlohmann::to_json(*j, 2)), ""); | ||||||
|  | @ -79,4 +84,14 @@ TEST_CASE("runtime checks") | ||||||
|         CHECK(std::is_nothrow_copy_constructible<json::out_of_range>::value == std::is_nothrow_copy_constructible<std::runtime_error>::value); |         CHECK(std::is_nothrow_copy_constructible<json::out_of_range>::value == std::is_nothrow_copy_constructible<std::runtime_error>::value); | ||||||
|         CHECK(std::is_nothrow_copy_constructible<json::other_error>::value == std::is_nothrow_copy_constructible<std::runtime_error>::value); |         CHECK(std::is_nothrow_copy_constructible<json::other_error>::value == std::is_nothrow_copy_constructible<std::runtime_error>::value); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     SECTION("silence -Wunneeded-internal-declaration errors") | ||||||
|  |     { | ||||||
|  |         j = nullptr; | ||||||
|  |         json j2; | ||||||
|  |         to_json(j2, pod()); | ||||||
|  |         to_json(j2, pod_bis()); | ||||||
|  |         from_json(j2, pod()); | ||||||
|  |         from_json(j2, pod_bis()); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -120,6 +120,8 @@ static void to_json(BasicJsonType& j, country c) | ||||||
|         case country::russia: |         case country::russia: | ||||||
|             j = u8"Российская Федерация"; |             j = u8"Российская Федерация"; | ||||||
|             return; |             return; | ||||||
|  |         default: | ||||||
|  |             break; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -803,7 +805,9 @@ class Evil | ||||||
|   public: |   public: | ||||||
|     Evil() = default; |     Evil() = default; | ||||||
|     template <typename T> |     template <typename T> | ||||||
|     Evil(T) {} |     Evil(T t) : m_i(sizeof(t)) {} | ||||||
|  | 
 | ||||||
|  |     int m_i = 0; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| void from_json(const json&, Evil&) {} | void from_json(const json&, Evil&) {} | ||||||
|  | @ -816,6 +820,10 @@ TEST_CASE("Issue #924") | ||||||
| 
 | 
 | ||||||
|     CHECK_NOTHROW(j.get<Evil>()); |     CHECK_NOTHROW(j.get<Evil>()); | ||||||
|     CHECK_NOTHROW(j.get<std::vector<Evil>>()); |     CHECK_NOTHROW(j.get<std::vector<Evil>>()); | ||||||
|  | 
 | ||||||
|  |     // silence Wunused-template warnings
 | ||||||
|  |     Evil e(1); | ||||||
|  |     CHECK(e.m_i >= 0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| TEST_CASE("Issue #1237") | TEST_CASE("Issue #1237") | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								test/thirdparty/doctest/doctest.h
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								test/thirdparty/doctest/doctest.h
									
										
									
									
										vendored
									
									
								
							|  | @ -2913,7 +2913,7 @@ typedef timer_large_integer::type ticks_t; | ||||||
|         //unsigned int getElapsedMilliseconds() const {
 |         //unsigned int getElapsedMilliseconds() const {
 | ||||||
|         //    return static_cast<unsigned int>(getElapsedMicroseconds() / 1000);
 |         //    return static_cast<unsigned int>(getElapsedMicroseconds() / 1000);
 | ||||||
|         //}
 |         //}
 | ||||||
|         double getElapsedSeconds() const { return (getCurrentTicks() - m_ticks) / 1000000.0; } |         double getElapsedSeconds() const { return static_cast<double>((getCurrentTicks() - m_ticks)) / 1000000.0; } | ||||||
| 
 | 
 | ||||||
|     private: |     private: | ||||||
|         ticks_t m_ticks = 0; |         ticks_t m_ticks = 0; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue