|
46 | 46 | * comparison, and these expressions only need to be careful to not cause
|
47 | 47 | * warnings for pointer use.
|
48 | 48 | */
|
49 |
| -#define __signed_type_use(x, ux) (2 + __is_nonneg(x, ux)) |
50 |
| -#define __unsigned_type_use(x, ux) (1 + 2 * (sizeof(ux) < 4)) |
51 |
| -#define __sign_use(x, ux) (is_signed_type(typeof(ux)) ? \ |
52 |
| - __signed_type_use(x, ux) : __unsigned_type_use(x, ux)) |
| 49 | +#define __signed_type_use(ux) (2 + __is_nonneg(ux)) |
| 50 | +#define __unsigned_type_use(ux) (1 + 2 * (sizeof(ux) < 4)) |
| 51 | +#define __sign_use(ux) (is_signed_type(typeof(ux)) ? \ |
| 52 | + __signed_type_use(ux) : __unsigned_type_use(ux)) |
53 | 53 |
|
54 | 54 | /*
|
55 | 55 | * Check whether a signed value is always non-negative.
|
|
71 | 71 | #else
|
72 | 72 | #define __signed_type(ux) typeof(__builtin_choose_expr(sizeof(ux) > 4, 1LL, 1L))
|
73 | 73 | #endif
|
74 |
| -#define __is_nonneg(x, ux) statically_true((__signed_type(ux))(x) >= 0) |
| 74 | +#define __is_nonneg(ux) statically_true((__signed_type(ux))(ux) >= 0) |
75 | 75 |
|
76 |
| -#define __types_ok(x, y, ux, uy) \ |
77 |
| - (__sign_use(x, ux) & __sign_use(y, uy)) |
| 76 | +#define __types_ok(ux, uy) \ |
| 77 | + (__sign_use(ux) & __sign_use(uy)) |
78 | 78 |
|
79 |
| -#define __types_ok3(x, y, z, ux, uy, uz) \ |
80 |
| - (__sign_use(x, ux) & __sign_use(y, uy) & __sign_use(z, uz)) |
| 79 | +#define __types_ok3(ux, uy, uz) \ |
| 80 | + (__sign_use(ux) & __sign_use(uy) & __sign_use(uz)) |
81 | 81 |
|
82 | 82 | #define __cmp_op_min <
|
83 | 83 | #define __cmp_op_max >
|
|
92 | 92 |
|
93 | 93 | #define __careful_cmp_once(op, x, y, ux, uy) ({ \
|
94 | 94 | __auto_type ux = (x); __auto_type uy = (y); \
|
95 |
| - BUILD_BUG_ON_MSG(!__types_ok(x, y, ux, uy), \ |
| 95 | + BUILD_BUG_ON_MSG(!__types_ok(ux, uy), \ |
96 | 96 | #op"("#x", "#y") signedness error"); \
|
97 | 97 | __cmp(op, ux, uy); })
|
98 | 98 |
|
|
109 | 109 | static_assert(__builtin_choose_expr(__is_constexpr((lo) > (hi)), \
|
110 | 110 | (lo) <= (hi), true), \
|
111 | 111 | "clamp() low limit " #lo " greater than high limit " #hi); \
|
112 |
| - BUILD_BUG_ON_MSG(!__types_ok3(val, lo, hi, uval, ulo, uhi), \ |
| 112 | + BUILD_BUG_ON_MSG(!__types_ok3(uval, ulo, uhi), \ |
113 | 113 | "clamp("#val", "#lo", "#hi") signedness error"); \
|
114 | 114 | __clamp(uval, ulo, uhi); })
|
115 | 115 |
|
|
149 | 149 |
|
150 | 150 | #define __careful_op3(op, x, y, z, ux, uy, uz) ({ \
|
151 | 151 | __auto_type ux = (x); __auto_type uy = (y);__auto_type uz = (z);\
|
152 |
| - BUILD_BUG_ON_MSG(!__types_ok3(x, y, z, ux, uy, uz), \ |
| 152 | + BUILD_BUG_ON_MSG(!__types_ok3(ux, uy, uz), \ |
153 | 153 | #op"3("#x", "#y", "#z") signedness error"); \
|
154 | 154 | __cmp(op, ux, __cmp(op, uy, uz)); })
|
155 | 155 |
|
|
0 commit comments