Просмотр исходного кода

Fixed warning "cast-align" (issue #914)

Benoit Blanchon 7 лет назад
Родитель
Сommit
f3265d2111

+ 1 - 0
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)

+ 4 - 2
src/ArduinoJson/Array/ArrayRef.hpp

@@ -23,7 +23,8 @@ template <typename TData>
 class ArrayRefBase {
  public:
   operator VariantConstRef() const {
-    return VariantConstRef(reinterpret_cast<const VariantData*>(_data));
+    const void* data = _data;  // prevent warning cast-align
+    return VariantConstRef(reinterpret_cast<const VariantData*>(data));
   }
 
   template <typename Visitor>
@@ -94,7 +95,8 @@ class ArrayRef : public ArrayRefBase<CollectionData>,
       : base_type(data), _pool(pool) {}
 
   operator VariantRef() {
-    return VariantRef(_pool, reinterpret_cast<VariantData*>(_data));
+    void* data = _data;  // prevent warning cast-align
+    return VariantRef(_pool, reinterpret_cast<VariantData*>(data));
   }
 
   operator ArrayConstRef() const {

+ 1 - 1
src/ArduinoJson/Memory/MemoryPool.hpp

@@ -91,7 +91,7 @@ class MemoryPool {
     return reinterpret_cast<T*>(allocRight(sizeof(T)));
   }
 
-  char* allocRight(size_t bytes) {
+  void* allocRight(size_t bytes) {
     if (!canAlloc(bytes)) return 0;
     _right -= bytes;
     return _right;

+ 4 - 2
src/ArduinoJson/Object/ObjectRef.hpp

@@ -18,7 +18,8 @@ template <typename TData>
 class ObjectRefBase {
  public:
   operator VariantConstRef() const {
-    return VariantConstRef(reinterpret_cast<const VariantData*>(_data));
+    const void* data = _data;  // prevent warning cast-align
+    return VariantConstRef(reinterpret_cast<const VariantData*>(data));
   }
 
   template <typename Visitor>
@@ -140,7 +141,8 @@ class ObjectRef : public ObjectRefBase<CollectionData>,
       : base_type(data), _pool(buf) {}
 
   operator VariantRef() const {
-    return VariantRef(_pool, reinterpret_cast<VariantData*>(_data));
+    void* data = _data;  // prevent warning cast-align
+    return VariantRef(_pool, reinterpret_cast<VariantData*>(data));
   }
 
   operator ObjectConstRef() const {