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

From: David Laight
Date: Sun Jan 07 2024 - 15:56:31 EST


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 <zoo868e@xxxxxxxxx>
> ---
> 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)