]> git.ozlabs.org Git - ccan/blobdiff - ccan/cast/cast.h
cast: fix compilation with GCC's -Wcast-qual
[ccan] / ccan / cast / cast.h
index f3bb445d0f7c145158c2c67bed05cdbb8059d61b..dfb95b59772611bf53582b4b4ef132970104a829 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef CCAN_CAST_H
 #define CCAN_CAST_H
 #include "config.h"
+#include <stdint.h>
 #include <ccan/build_assert/build_assert.h>
 
 /**
@@ -14,7 +15,7 @@
  */
 #define cast_signed(type, expr)                                                \
        ((type)(expr)                                                   \
-        + EXPR_BUILD_ASSERT(cast_sign_compatible(type, (expr))))
+        + BUILD_ASSERT_OR_ZERO(cast_sign_compatible(type, (expr))))
 
 /**
  * cast_const - remove a const qualifier from a pointer.
@@ -37,9 +38,9 @@
  *             return NULL;
  *     }
  */
-#define cast_const(type, expr)                                 \
-       ((type)(expr)                                           \
-        + EXPR_BUILD_ASSERT(cast_const_compat1((expr), type)))
+#define cast_const(type, expr)                                         \
+       ((type)((intptr_t)(expr)                                        \
+               + BUILD_ASSERT_OR_ZERO(cast_const_compat1((expr), type))))
 
 /**
  * cast_const2 - remove a const qualifier from a pointer to a pointer.
@@ -49,9 +50,9 @@
  * This ensures that you are only removing the const qualifier from an
  * expression.  The expression must otherwise match @type.
  */
-#define cast_const2(type, expr)                                        \
-       ((type)(expr)                                           \
-        + EXPR_BUILD_ASSERT(cast_const_compat2((expr), type)))
+#define cast_const2(type, expr)                                                \
+       ((type)((intptr_t)(expr)                                        \
+               + BUILD_ASSERT_OR_ZERO(cast_const_compat2((expr), type))))
 
 /**
  * cast_const3 - remove a const from a pointer to a pointer to a pointer..
@@ -61,9 +62,9 @@
  * This ensures that you are only removing the const qualifier from an
  * expression.  The expression must otherwise match @type.
  */
-#define cast_const3(type, expr)                                        \
-       ((type)(expr)                                           \
-        + EXPR_BUILD_ASSERT(cast_const_compat3((expr), type)))
+#define cast_const3(type, expr)                                                \
+       ((type)((intptr_t)(expr)                                        \
+               + BUILD_ASSERT_OR_ZERO(cast_const_compat3((expr), type))))
 
 
 /**