utils: fix build error with g++
g++ does not support __builtin_choose_expr, so we can't support byte swapping as constant expression there. Reported-by: Cleynhens Stijn <Stijn.Cleynhens@technicolor.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
ace64897d4
commit
6eff829d78
1 changed files with 9 additions and 0 deletions
9
utils.h
9
utils.h
|
@ -127,9 +127,18 @@ int clock_gettime(int type, struct timespec *tv);
|
||||||
#define __eval_once(func, x) \
|
#define __eval_once(func, x) \
|
||||||
({ __typeof__(x) __x = x; func(__x); })
|
({ __typeof__(x) __x = x; func(__x); })
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
/*
|
||||||
|
* g++ does not support __builtin_choose_expr, so always use __eval_once.
|
||||||
|
* Unfortunately this means that the byte order functions can't be used
|
||||||
|
* as a constant expression anymore
|
||||||
|
*/
|
||||||
|
#define __eval_safe(func, x) __eval_once(func, x)
|
||||||
|
#else
|
||||||
#define __eval_safe(func, x) \
|
#define __eval_safe(func, x) \
|
||||||
__builtin_choose_expr(__is_constant(x), \
|
__builtin_choose_expr(__is_constant(x), \
|
||||||
func(x), __eval_once(func, x))
|
func(x), __eval_once(func, x))
|
||||||
|
#endif
|
||||||
|
|
||||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue