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) \
|
||||
({ __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) \
|
||||
__builtin_choose_expr(__is_constant(x), \
|
||||
func(x), __eval_once(func, x))
|
||||
#endif
|
||||
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
|
||||
|
|
Loading…
Reference in a new issue