Make CHECK_TYPE_NONCONST macro portable
also replace __typeof -> typeof
This commit is contained in:
@@ -474,14 +474,14 @@ enum InterpolationType {
|
|||||||
* ... the compiler optimizes away the temp var */
|
* ... the compiler optimizes away the temp var */
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define CHECK_TYPE(var, type) { \
|
#define CHECK_TYPE(var, type) { \
|
||||||
__typeof(var) *__tmp; \
|
typeof(var) *__tmp; \
|
||||||
__tmp = (type *)NULL; \
|
__tmp = (type *)NULL; \
|
||||||
(void)__tmp; \
|
(void)__tmp; \
|
||||||
} (void)0
|
} (void)0
|
||||||
|
|
||||||
#define CHECK_TYPE_PAIR(var_a, var_b) { \
|
#define CHECK_TYPE_PAIR(var_a, var_b) { \
|
||||||
__typeof(var_a) *__tmp; \
|
typeof(var_a) *__tmp; \
|
||||||
__tmp = (__typeof(var_b) *)NULL; \
|
__tmp = (typeof(var_b) *)NULL; \
|
||||||
(void)__tmp; \
|
(void)__tmp; \
|
||||||
} (void)0
|
} (void)0
|
||||||
#else
|
#else
|
||||||
|
@@ -163,7 +163,7 @@ static const int NAN_INT = 0x7FC00000;
|
|||||||
#ifndef CHECK_TYPE
|
#ifndef CHECK_TYPE
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define CHECK_TYPE(var, type) { \
|
#define CHECK_TYPE(var, type) { \
|
||||||
__typeof(var) *__tmp; \
|
typeof(var) *__tmp; \
|
||||||
__tmp = (type *)NULL; \
|
__tmp = (type *)NULL; \
|
||||||
(void)__tmp; \
|
(void)__tmp; \
|
||||||
} (void)0
|
} (void)0
|
||||||
|
@@ -157,39 +157,38 @@
|
|||||||
* ... the compiler optimizes away the temp var */
|
* ... the compiler optimizes away the temp var */
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define CHECK_TYPE(var, type) { \
|
#define CHECK_TYPE(var, type) { \
|
||||||
__typeof(var) *__tmp; \
|
typeof(var) *__tmp; \
|
||||||
__tmp = (type *)NULL; \
|
__tmp = (type *)NULL; \
|
||||||
(void)__tmp; \
|
(void)__tmp; \
|
||||||
} (void)0
|
} (void)0
|
||||||
|
|
||||||
#define CHECK_TYPE_PAIR(var_a, var_b) { \
|
#define CHECK_TYPE_PAIR(var_a, var_b) { \
|
||||||
__typeof(var_a) *__tmp; \
|
typeof(var_a) *__tmp; \
|
||||||
__tmp = (__typeof(var_b) *)NULL; \
|
__tmp = (typeof(var_b) *)NULL; \
|
||||||
(void)__tmp; \
|
(void)__tmp; \
|
||||||
} (void)0
|
} (void)0
|
||||||
|
|
||||||
#define CHECK_TYPE_PAIR_INLINE(var_a, var_b) ((void)({ \
|
#define CHECK_TYPE_PAIR_INLINE(var_a, var_b) ((void)({ \
|
||||||
__typeof(var_a) *__tmp; \
|
typeof(var_a) *__tmp; \
|
||||||
__tmp = (__typeof(var_b) *)NULL; \
|
__tmp = (typeof(var_b) *)NULL; \
|
||||||
(void)__tmp; \
|
(void)__tmp; \
|
||||||
}))
|
}))
|
||||||
|
|
||||||
#define CHECK_TYPE_NONCONST(var) { \
|
|
||||||
void *non_const = ((__typeof(var))NULL); \
|
|
||||||
(void)non_const; \
|
|
||||||
} (void)0
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
# define CHECK_TYPE(var, type)
|
# define CHECK_TYPE(var, type)
|
||||||
# define CHECK_TYPE_PAIR(var_a, var_b)
|
# define CHECK_TYPE_PAIR(var_a, var_b)
|
||||||
# define CHECK_TYPE_PAIR_INLINE(var_a, var_b) (void)0
|
# define CHECK_TYPE_PAIR_INLINE(var_a, var_b) (void)0
|
||||||
# define CHECK_TYPE_NONCONST(var) (void)0
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* can be used in simple macros */
|
/* can be used in simple macros */
|
||||||
#define CHECK_TYPE_INLINE(val, type) \
|
#define CHECK_TYPE_INLINE(val, type) \
|
||||||
((void)(((type)0) != (val)))
|
((void)(((type)0) != (val)))
|
||||||
|
|
||||||
|
#define CHECK_TYPE_NONCONST(var) { \
|
||||||
|
void *non_const = 0 ? (var) : NULL; \
|
||||||
|
(void)non_const; \
|
||||||
|
} (void)0
|
||||||
|
|
||||||
#define SWAP(type, a, b) { \
|
#define SWAP(type, a, b) { \
|
||||||
type sw_ap; \
|
type sw_ap; \
|
||||||
CHECK_TYPE(a, type); \
|
CHECK_TYPE(a, type); \
|
||||||
@@ -414,8 +413,7 @@
|
|||||||
/* memcpy, skipping the first part of a struct,
|
/* memcpy, skipping the first part of a struct,
|
||||||
* ensures 'struct_dst' isn't const and that the offset can be computed at compile time */
|
* ensures 'struct_dst' isn't const and that the offset can be computed at compile time */
|
||||||
#define MEMCPY_STRUCT_OFS(struct_dst, struct_src, member) { \
|
#define MEMCPY_STRUCT_OFS(struct_dst, struct_src, member) { \
|
||||||
void *_not_const = struct_dst; \
|
CHECK_TYPE_NONCONST(struct_dst); \
|
||||||
(void)_not_const; \
|
|
||||||
((void)(struct_dst == struct_src), \
|
((void)(struct_dst == struct_src), \
|
||||||
memcpy((char *)(struct_dst) + OFFSETOF_STRUCT(struct_dst, member), \
|
memcpy((char *)(struct_dst) + OFFSETOF_STRUCT(struct_dst, member), \
|
||||||
(char *)(struct_src) + OFFSETOF_STRUCT(struct_dst, member), \
|
(char *)(struct_src) + OFFSETOF_STRUCT(struct_dst, member), \
|
||||||
|
Reference in New Issue
Block a user