X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fcast%2Fcast.h;h=daebd8572391f07dfb17ae20c341c114c2507c3d;hp=f3bb445d0f7c145158c2c67bed05cdbb8059d61b;hb=b0fa019adb998c20a8740f5696b61ae87d2a77a6;hpb=118ace351b789dfaca8866f84a8cd4b924941268 diff --git a/ccan/cast/cast.h b/ccan/cast/cast.h index f3bb445d..daebd857 100644 --- a/ccan/cast/cast.h +++ b/ccan/cast/cast.h @@ -1,6 +1,7 @@ #ifndef CCAN_CAST_H #define CCAN_CAST_H #include "config.h" +#include #include /** @@ -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)))) /** @@ -121,11 +122,8 @@ #else #define cast_sign_compatible(type, expr) \ (sizeof(*(type)0) == 1 && sizeof(*(expr)) == 1) -#define cast_const_compat1(expr, type) \ - (sizeof(*(expr)) == sizeof(*(type)0)) -#define cast_const_compat2(expr, type) \ - (sizeof(**(expr)) == sizeof(**(type)0)) -#define cast_const_compat3(expr, type) \ - (sizeof(***(expr)) == sizeof(***(type)0)) +#define cast_const_compat1(expr, type) (1) +#define cast_const_compat2(expr, type) (1) +#define cast_const_compat3(expr, type) (1) #endif #endif /* CCAN_CAST_H */