Messages in this thread Patch in this message | | | From | David Laight <> | Subject | [PATCH next] compiler.h: Move __is_constexpr() to compiler.h. | Date | Mon, 2 Oct 2023 14:34:05 +0000 |
| |
Prior to f747e6667ebb2 __is_constexpr() was in its only user minmax.h. That commit moved it to const.h - but that file just defined ULL(x) and UL(x) so that constants can be defined for .S and .c files. So apart from the word 'const' it wasn't really a good location. Instead move the definition to compiler.h just before the similar is_signed_type() and is_unsigned_type(). (Which were moved there by dcf8e5633e2e6) This may not be a good long-term home, but the three definitions belong together.
Signed-off-by: David Laight <david.laight@aculab.com> --- This makes it possible to use __is_constexpr() inside is_signed_type() so that the result is constant integer expression for pointer types. In particular (void *)1 isn't constant enough.
include/linux/compiler.h | 8 ++++++++ include/linux/const.h | 8 -------- tools/include/linux/const.h | 8 -------- 3 files changed, 8 insertions(+), 16 deletions(-)
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index d7779a18b24f..2efec9bfcc40 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -230,6 +230,14 @@ static inline void *offset_to_ptr(const int *off) /* &a[0] degrades to a pointer: a different type from an array */ #define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0])) +/* + * This returns a constant expression while determining if an argument is + * a constant expression, most importantly without evaluating the argument. + * Glory to Martin Uecker <Martin.Uecker@med.uni-goettingen.de> + */ +#define __is_constexpr(x) \ + (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8))) + /* * Whether 'type' is a signed type or an unsigned type. Supports scalar types, * bool and also pointer types. diff --git a/include/linux/const.h b/include/linux/const.h index 435ddd72d2c4..81b8aae5a855 100644 --- a/include/linux/const.h +++ b/include/linux/const.h @@ -3,12 +3,4 @@ #include <vdso/const.h> -/* - * This returns a constant expression while determining if an argument is - * a constant expression, most importantly without evaluating the argument. - * Glory to Martin Uecker <Martin.Uecker@med.uni-goettingen.de> - */ -#define __is_constexpr(x) \ - (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8))) - #endif /* _LINUX_CONST_H */ diff --git a/tools/include/linux/const.h b/tools/include/linux/const.h index 435ddd72d2c4..81b8aae5a855 100644 --- a/tools/include/linux/const.h +++ b/tools/include/linux/const.h @@ -3,12 +3,4 @@ #include <vdso/const.h> -/* - * This returns a constant expression while determining if an argument is - * a constant expression, most importantly without evaluating the argument. - * Glory to Martin Uecker <Martin.Uecker@med.uni-goettingen.de> - */ -#define __is_constexpr(x) \ - (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8))) - #endif /* _LINUX_CONST_H */ -- 2.17.1 - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)
| |