Go to the documentation of this file.
24 #define IC_IS_TYPE(type, expr) __builtin_types_compatible_p(type, __typeof__(expr))
32 #define IC_ASSERT_TYPE(type, expr) \
33 IC_BUILD_ASSERT(IC_IS_TYPE(type, expr), #expr " is not of type " #type)
42 #define IC_REQUIRE_TYPE(type, expr) \
44 IC_REQUIRE_CONSTANT(expr); \
45 IC_ASSERT_TYPE(type, expr); \
49 #define _IC_IS_UINT(expr) \
50 (__builtin_types_compatible_p(uint8_t, __typeof__(expr)) \
51 || __builtin_types_compatible_p(unsigned char, __typeof__(expr)) \
52 || __builtin_types_compatible_p(uint16_t, __typeof__(expr)) \
53 || __builtin_types_compatible_p(unsigned short int, __typeof__(expr)) \
54 || __builtin_types_compatible_p(uint32_t, __typeof__(expr)) \
55 || __builtin_types_compatible_p(unsigned int, __typeof__(expr)) \
56 || __builtin_types_compatible_p(unsigned long int, __typeof__(expr)) \
57 || __builtin_types_compatible_p(uint64_t, __typeof__(expr)) \
58 || __builtin_types_compatible_p(unsigned long long int, __typeof__(expr)))
67 #define IC_IS_UINT(expr) \
69 IC_ASSERT_CONSTANT(expr); \
79 #define IC_Z_REQUIRE_UINT(expr) \
81 __auto_type const _ic_z_is_uint_expr_ = (expr); \
82 IC_BUILD_ASSERT(_IC_IS_UINT(expr)); \
83 _ic_z_is_uint_expr_; \
93 #define IC_REQUIRE_UINT(expr) \
95 IC_BUILD_ASSERT(IC_IS_UINT(expr), #expr " is not an unsigned integer type"); \
99 #define _IC_IS_INT(expr) \
100 (__builtin_types_compatible_p(int8_t, __typeof__(expr)) \
101 || __builtin_types_compatible_p(signed char, __typeof__(expr)) \
102 || __builtin_types_compatible_p(int16_t, __typeof__(expr)) \
103 || __builtin_types_compatible_p(signed short int, __typeof__(expr)) \
104 || __builtin_types_compatible_p(int32_t, __typeof__(expr)) \
105 || __builtin_types_compatible_p(int, __typeof__(expr)) \
106 || __builtin_types_compatible_p(signed long int, __typeof__(expr)) \
107 || __builtin_types_compatible_p(int64_t, __typeof__(expr)) \
108 || __builtin_types_compatible_p(signed long long int, __typeof__(expr)))
117 #define IC_IS_INT(expr) \
119 IC_ASSERT_CONSTANT(expr); \
130 #define IC_REQUIRE_INT(expr) \
132 IC_BUILD_ASSERT(IC_IS_INT(expr), #expr " is not a signed integer type"); \
143 #define IC_IS_FP(expr) \
145 IC_ASSERT_CONSTANT(expr); \
146 (__builtin_types_compatible_p(float, __typeof__(expr)) \
147 || __builtin_types_compatible_p(double, __typeof__(expr)) \
148 || __builtin_types_compatible_p(long double, __typeof__(expr))); \
158 #define IC_REQUIRE_FP(expr) \
160 IC_BUILD_ASSERT(IC_IS_FP(IC_REQUIRE_CONSTANT(expr))); \