2024-01-07 20:11:44

by Matt Jan

[permalink] [raw]
Subject: [PATCH] minmax: allow comparisons of 'long long int' against 'unsigned char/short/int'

Since 'unsigned int' get promoted to 'signed long long int' it is safe
to compare them against an 'long long int' value.

Signed-off-by: Matt Jan <[email protected]>
---
include/linux/minmax.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/minmax.h b/include/linux/minmax.h
index 2ec559284a9f..61171286b468 100644
--- a/include/linux/minmax.h
+++ b/include/linux/minmax.h
@@ -37,7 +37,7 @@

#define __types_ok(x, y) \
(__is_signed(x) == __is_signed(y) || \
- __is_signed((x) + 0) == __is_signed((y) + 0) || \
+ __is_signed((x) + 0ll) == __is_signed((y) + 0ll) || \
__is_noneg_int(x) || __is_noneg_int(y))

#define __cmp_op_min <
--
2.34.1



2024-01-07 20:56:30

by David Laight

[permalink] [raw]
Subject: RE: [PATCH] minmax: allow comparisons of 'long long int' against 'unsigned char/short/int'

From: Matt Jan
> Sent: 07 January 2024 20:11
>
> Since 'unsigned int' get promoted to 'signed long long int' it is safe
> to compare them against an 'long long int' value.

Yes, but not as below.
That change would allow pretty much everything through since everything
except 'unsigned long long' would be signed.

You'd need a much more complex check and the CPP bloat is pretty
horrid already.

That particular check is there to promote unsigned char/short to
signed int - which always happens.

David

>
> Signed-off-by: Matt Jan <[email protected]>
> ---
> include/linux/minmax.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/minmax.h b/include/linux/minmax.h
> index 2ec559284a9f..61171286b468 100644
> --- a/include/linux/minmax.h
> +++ b/include/linux/minmax.h
> @@ -37,7 +37,7 @@
>
> #define __types_ok(x, y) \
> (__is_signed(x) == __is_signed(y) || \
> - __is_signed((x) + 0) == __is_signed((y) + 0) || \
> + __is_signed((x) + 0ll) == __is_signed((y) + 0ll) || \
> __is_noneg_int(x) || __is_noneg_int(y))
>
> #define __cmp_op_min <
> --
> 2.34.1
>

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)