From f3265d2111666994a028080df4e4ef268581e808 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Thu, 28 Feb 2019 17:20:01 +0100 Subject: [PATCH] Fixed warning "cast-align" (issue #914) --- CHANGELOG.md | 1 + src/ArduinoJson/Array/ArrayRef.hpp | 6 ++++-- src/ArduinoJson/Memory/MemoryPool.hpp | 2 +- src/ArduinoJson/Object/ObjectRef.hpp | 6 ++++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15b01919..0b1b482a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ HEAD ---- * Fixed warning "unused variable" with GCC 4.4 (issue #912) +* Fixed warning "cast increases required alignment" (issue #914) * Added a clear error message for `StaticJsonBuffer` and `DynamicJsonBuffer` v6.9.0 (2019-02-26) diff --git a/src/ArduinoJson/Array/ArrayRef.hpp b/src/ArduinoJson/Array/ArrayRef.hpp index f4e67e31..8197d0d3 100644 --- a/src/ArduinoJson/Array/ArrayRef.hpp +++ b/src/ArduinoJson/Array/ArrayRef.hpp @@ -23,7 +23,8 @@ template class ArrayRefBase { public: operator VariantConstRef() const { - return VariantConstRef(reinterpret_cast(_data)); + const void* data = _data; // prevent warning cast-align + return VariantConstRef(reinterpret_cast(data)); } template @@ -94,7 +95,8 @@ class ArrayRef : public ArrayRefBase, : base_type(data), _pool(pool) {} operator VariantRef() { - return VariantRef(_pool, reinterpret_cast(_data)); + void* data = _data; // prevent warning cast-align + return VariantRef(_pool, reinterpret_cast(data)); } operator ArrayConstRef() const { diff --git a/src/ArduinoJson/Memory/MemoryPool.hpp b/src/ArduinoJson/Memory/MemoryPool.hpp index a541b051..b1b253cb 100644 --- a/src/ArduinoJson/Memory/MemoryPool.hpp +++ b/src/ArduinoJson/Memory/MemoryPool.hpp @@ -91,7 +91,7 @@ class MemoryPool { return reinterpret_cast(allocRight(sizeof(T))); } - char* allocRight(size_t bytes) { + void* allocRight(size_t bytes) { if (!canAlloc(bytes)) return 0; _right -= bytes; return _right; diff --git a/src/ArduinoJson/Object/ObjectRef.hpp b/src/ArduinoJson/Object/ObjectRef.hpp index 7c74e195..0a8063e7 100644 --- a/src/ArduinoJson/Object/ObjectRef.hpp +++ b/src/ArduinoJson/Object/ObjectRef.hpp @@ -18,7 +18,8 @@ template class ObjectRefBase { public: operator VariantConstRef() const { - return VariantConstRef(reinterpret_cast(_data)); + const void* data = _data; // prevent warning cast-align + return VariantConstRef(reinterpret_cast(data)); } template @@ -140,7 +141,8 @@ class ObjectRef : public ObjectRefBase, : base_type(data), _pool(buf) {} operator VariantRef() const { - return VariantRef(_pool, reinterpret_cast(_data)); + void* data = _data; // prevent warning cast-align + return VariantRef(_pool, reinterpret_cast(data)); } operator ObjectConstRef() const {