diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b7a9ef6..29749eed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ HEAD * Fix `call of overloaded 'String(const char*, int)' is ambiguous` * Fix `JsonString` operator `==` and `!=` for non-zero-terminated string +* Fix `-Wsign-conversion` on GCC 8 (issue #1715) v6.19.2 (2022-02-14) ------- diff --git a/extras/CompileOptions.cmake b/extras/CompileOptions.cmake index e083ff9e..82a750a1 100644 --- a/extras/CompileOptions.cmake +++ b/extras/CompileOptions.cmake @@ -18,6 +18,7 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|Clang)") -Wparentheses -Wredundant-decls -Wshadow + -Wsign-conversion -Wsign-promo -Wstrict-aliasing -Wundef diff --git a/extras/tests/JsonArray/add.cpp b/extras/tests/JsonArray/add.cpp index c6b1b9a7..369bcf2d 100644 --- a/extras/tests/JsonArray/add.cpp +++ b/extras/tests/JsonArray/add.cpp @@ -40,7 +40,7 @@ TEST_CASE("JsonArray::add()") { #ifdef HAS_VARIABLE_LENGTH_ARRAY SECTION("vla") { - int i = 16; + size_t i = 16; char vla[i]; strcpy(vla, "world"); diff --git a/extras/tests/JsonArray/subscript.cpp b/extras/tests/JsonArray/subscript.cpp index 1d5a6a53..57bbe140 100644 --- a/extras/tests/JsonArray/subscript.cpp +++ b/extras/tests/JsonArray/subscript.cpp @@ -135,7 +135,7 @@ TEST_CASE("JsonArray::operator[]") { #ifdef HAS_VARIABLE_LENGTH_ARRAY SECTION("set(VLA)") { - int i = 16; + size_t i = 16; char vla[i]; strcpy(vla, "world"); @@ -146,7 +146,7 @@ TEST_CASE("JsonArray::operator[]") { } SECTION("operator=(VLA)") { - int i = 16; + size_t i = 16; char vla[i]; strcpy(vla, "world"); diff --git a/extras/tests/JsonDeserializer/filter.cpp b/extras/tests/JsonDeserializer/filter.cpp index e950f768..f72968ee 100644 --- a/extras/tests/JsonDeserializer/filter.cpp +++ b/extras/tests/JsonDeserializer/filter.cpp @@ -708,7 +708,7 @@ TEST_CASE("Overloads") { #ifdef HAS_VARIABLE_LENGTH_ARRAY SECTION("char[n], Filter") { - int i = 4; + size_t i = 4; char vla[i]; strcpy(vla, "{}"); deserializeJson(doc, vla, Filter(filter)); @@ -736,7 +736,7 @@ TEST_CASE("Overloads") { #ifdef HAS_VARIABLE_LENGTH_ARRAY SECTION("char[n], Filter, NestingLimit") { - int i = 4; + size_t i = 4; char vla[i]; strcpy(vla, "{}"); deserializeJson(doc, vla, Filter(filter), NestingLimit(5)); @@ -764,7 +764,7 @@ TEST_CASE("Overloads") { #ifdef HAS_VARIABLE_LENGTH_ARRAY SECTION("char[n], NestingLimit, Filter") { - int i = 4; + size_t i = 4; char vla[i]; strcpy(vla, "{}"); deserializeJson(doc, vla, NestingLimit(5), Filter(filter)); diff --git a/extras/tests/JsonDeserializer/input_types.cpp b/extras/tests/JsonDeserializer/input_types.cpp index 7f9f00ac..04054c6a 100644 --- a/extras/tests/JsonDeserializer/input_types.cpp +++ b/extras/tests/JsonDeserializer/input_types.cpp @@ -121,7 +121,7 @@ TEST_CASE("deserializeJson(std::istream&)") { #ifdef HAS_VARIABLE_LENGTH_ARRAY TEST_CASE("deserializeJson(VLA)") { - int i = 9; + size_t i = 9; char vla[i]; strcpy(vla, "{\"a\":42}"); diff --git a/extras/tests/JsonDocument/ElementProxy.cpp b/extras/tests/JsonDocument/ElementProxy.cpp index 9e4c7a96..1912d5f9 100644 --- a/extras/tests/JsonDocument/ElementProxy.cpp +++ b/extras/tests/JsonDocument/ElementProxy.cpp @@ -131,7 +131,7 @@ TEST_CASE("ElementProxy::remove()") { ep["a"] = 1; ep["b"] = 2; - int i = 4; + size_t i = 4; char vla[i]; strcpy(vla, "b"); ep.remove(vla); diff --git a/extras/tests/JsonDocument/MemberProxy.cpp b/extras/tests/JsonDocument/MemberProxy.cpp index 813152d1..ea1dc44e 100644 --- a/extras/tests/JsonDocument/MemberProxy.cpp +++ b/extras/tests/JsonDocument/MemberProxy.cpp @@ -171,7 +171,7 @@ TEST_CASE("MemberProxy::remove()") { mp["a"] = 1; mp["b"] = 2; - int i = 4; + size_t i = 4; char vla[i]; strcpy(vla, "b"); mp.remove(vla); diff --git a/extras/tests/JsonDocument/remove.cpp b/extras/tests/JsonDocument/remove.cpp index 2fb8cad3..b7770733 100644 --- a/extras/tests/JsonDocument/remove.cpp +++ b/extras/tests/JsonDocument/remove.cpp @@ -41,7 +41,7 @@ TEST_CASE("JsonDocument::remove()") { doc["a"] = 1; doc["b"] = 2; - int i = 4; + size_t i = 4; char vla[i]; strcpy(vla, "b"); doc.remove(vla); diff --git a/extras/tests/JsonObject/containsKey.cpp b/extras/tests/JsonObject/containsKey.cpp index 75991acb..4f37f7e6 100644 --- a/extras/tests/JsonObject/containsKey.cpp +++ b/extras/tests/JsonObject/containsKey.cpp @@ -29,7 +29,7 @@ TEST_CASE("JsonObject::containsKey()") { #ifdef HAS_VARIABLE_LENGTH_ARRAY SECTION("key is a VLA") { - int i = 16; + size_t i = 16; char vla[i]; strcpy(vla, "hello"); diff --git a/extras/tests/JsonObject/createNestedArray.cpp b/extras/tests/JsonObject/createNestedArray.cpp index 6871794e..4d43038f 100644 --- a/extras/tests/JsonObject/createNestedArray.cpp +++ b/extras/tests/JsonObject/createNestedArray.cpp @@ -16,7 +16,7 @@ TEST_CASE("JsonObject::createNestedArray()") { #ifdef HAS_VARIABLE_LENGTH_ARRAY SECTION("key is a VLA") { - int i = 16; + size_t i = 16; char vla[i]; strcpy(vla, "hello"); diff --git a/extras/tests/JsonObject/createNestedObject.cpp b/extras/tests/JsonObject/createNestedObject.cpp index 47d76b27..29f4d39d 100644 --- a/extras/tests/JsonObject/createNestedObject.cpp +++ b/extras/tests/JsonObject/createNestedObject.cpp @@ -15,7 +15,7 @@ TEST_CASE("JsonObject::createNestedObject()") { #ifdef HAS_VARIABLE_LENGTH_ARRAY SECTION("key is a VLA") { - int i = 16; + size_t i = 16; char vla[i]; strcpy(vla, "hello"); diff --git a/extras/tests/JsonObject/remove.cpp b/extras/tests/JsonObject/remove.cpp index 6a2efdb1..f1cb20cb 100644 --- a/extras/tests/JsonObject/remove.cpp +++ b/extras/tests/JsonObject/remove.cpp @@ -60,7 +60,7 @@ TEST_CASE("JsonObject::remove()") { #ifdef HAS_VARIABLE_LENGTH_ARRAY SECTION("key is a vla") { - int i = 16; + size_t i = 16; char vla[i]; strcpy(vla, "b"); obj.remove(vla); diff --git a/extras/tests/JsonObject/subscript.cpp b/extras/tests/JsonObject/subscript.cpp index aa7dde35..e8242f63 100644 --- a/extras/tests/JsonObject/subscript.cpp +++ b/extras/tests/JsonObject/subscript.cpp @@ -172,7 +172,7 @@ TEST_CASE("JsonObject::operator[]") { #if defined(HAS_VARIABLE_LENGTH_ARRAY) && \ !defined(SUBSCRIPT_CONFLICTS_WITH_BUILTIN_OPERATOR) SECTION("obj[VLA] = str") { - int i = 16; + size_t i = 16; char vla[i]; strcpy(vla, "hello"); @@ -182,7 +182,7 @@ TEST_CASE("JsonObject::operator[]") { } SECTION("obj[str] = VLA") { // issue #416 - int i = 32; + size_t i = 32; char vla[i]; strcpy(vla, "world"); @@ -192,7 +192,7 @@ TEST_CASE("JsonObject::operator[]") { } SECTION("obj.set(VLA, str)") { - int i = 16; + size_t i = 16; char vla[i]; strcpy(vla, "hello"); @@ -202,7 +202,7 @@ TEST_CASE("JsonObject::operator[]") { } SECTION("obj.set(str, VLA)") { - int i = 32; + size_t i = 32; char vla[i]; strcpy(vla, "world"); @@ -212,7 +212,7 @@ TEST_CASE("JsonObject::operator[]") { } SECTION("obj[VLA]") { - int i = 16; + size_t i = 16; char vla[i]; strcpy(vla, "hello"); diff --git a/extras/tests/JsonVariant/set.cpp b/extras/tests/JsonVariant/set.cpp index eba15d43..899ef6a5 100644 --- a/extras/tests/JsonVariant/set.cpp +++ b/extras/tests/JsonVariant/set.cpp @@ -71,7 +71,7 @@ TEST_CASE("JsonVariant::set() when there is enough memory") { #ifdef HAS_VARIABLE_LENGTH_ARRAY SECTION("VLA") { - int n = 16; + size_t n = 16; char str[n]; strcpy(str, "hello"); diff --git a/extras/tests/JsonVariant/subscript.cpp b/extras/tests/JsonVariant/subscript.cpp index 9662555e..f466cd27 100644 --- a/extras/tests/JsonVariant/subscript.cpp +++ b/extras/tests/JsonVariant/subscript.cpp @@ -108,7 +108,7 @@ TEST_CASE("JsonVariant::operator[]") { #if defined(HAS_VARIABLE_LENGTH_ARRAY) && \ !defined(SUBSCRIPT_CONFLICTS_WITH_BUILTIN_OPERATOR) SECTION("key is a VLA") { - int i = 16; + size_t i = 16; char vla[i]; strcpy(vla, "hello"); @@ -119,7 +119,7 @@ TEST_CASE("JsonVariant::operator[]") { } SECTION("key is a VLA, const JsonVariant") { - int i = 16; + size_t i = 16; char vla[i]; strcpy(vla, "hello"); diff --git a/extras/tests/MsgPackDeserializer/filter.cpp b/extras/tests/MsgPackDeserializer/filter.cpp index 583c42f8..57dd7bea 100644 --- a/extras/tests/MsgPackDeserializer/filter.cpp +++ b/extras/tests/MsgPackDeserializer/filter.cpp @@ -1068,7 +1068,7 @@ TEST_CASE("Overloads") { #ifdef HAS_VARIABLE_LENGTH_ARRAY SECTION("char[n], Filter") { - int i = 4; + size_t i = 4; char vla[i]; strcpy(vla, "{}"); deserializeMsgPack(doc, vla, Filter(filter)); @@ -1096,7 +1096,7 @@ TEST_CASE("Overloads") { #ifdef HAS_VARIABLE_LENGTH_ARRAY SECTION("char[n], Filter, NestingLimit") { - int i = 4; + size_t i = 4; char vla[i]; strcpy(vla, "{}"); deserializeMsgPack(doc, vla, Filter(filter), NestingLimit(5)); @@ -1124,7 +1124,7 @@ TEST_CASE("Overloads") { #ifdef HAS_VARIABLE_LENGTH_ARRAY SECTION("char[n], NestingLimit, Filter") { - int i = 4; + size_t i = 4; char vla[i]; strcpy(vla, "{}"); deserializeMsgPack(doc, vla, NestingLimit(5), Filter(filter)); diff --git a/extras/tests/MsgPackDeserializer/input_types.cpp b/extras/tests/MsgPackDeserializer/input_types.cpp index af9b693a..f46d4691 100644 --- a/extras/tests/MsgPackDeserializer/input_types.cpp +++ b/extras/tests/MsgPackDeserializer/input_types.cpp @@ -72,7 +72,7 @@ TEST_CASE("deserializeMsgPack(std::istream&)") { #ifdef HAS_VARIABLE_LENGTH_ARRAY TEST_CASE("deserializeMsgPack(VLA)") { - int i = 16; + size_t i = 16; char vla[i]; memcpy(vla, "\xDE\x00\x01\xA5Hello\xA5world", 15); diff --git a/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp b/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp index 41da6f06..00b717a6 100644 --- a/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp +++ b/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp @@ -481,7 +481,7 @@ class MsgPackDeserializer { T size; if (!readInteger(size)) return false; - return skipBytes(size + 1); + return skipBytes(size + 1U); } MemoryPool *_pool; diff --git a/src/ArduinoJson/Strings/Adapters/RamString.hpp b/src/ArduinoJson/Strings/Adapters/RamString.hpp index 1d399161..5a55552a 100644 --- a/src/ArduinoJson/Strings/Adapters/RamString.hpp +++ b/src/ArduinoJson/Strings/Adapters/RamString.hpp @@ -106,13 +106,13 @@ inline SizedRamString adaptString(const char* s, size_t n) { return SizedRamString(s, n); } -template +template struct IsString : true_type {}; -template +template struct IsString : true_type {}; -template +template inline SizedRamString adaptString(char s[N]) { return SizedRamString(s, strlen(s)); }