[PATCH 8/8] drm/client: s/unsigned int i/int i/

Jani Nikula jani.nikula at linux.intel.com
Wed Oct 9 14:32:52 UTC 2024


On Tue, 08 Oct 2024, Ville Syrjälä <ville.syrjala at linux.intel.com> wrote:
> On Mon, Oct 07, 2024 at 09:43:47AM +0200, Thomas Zimmermann wrote:
>> Hi
>> 
>> Am 03.10.24 um 13:33 schrieb Ville Syrjala:
>> > From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>> >
>> > Replace the 'unsigned int i' footguns with plain old signed
>> > int. Avoids accidents if/when someone decides they need
>> > to iterate backwards.
>> 
>> Why are signed types preferable here?
>
> If you iterate backwards you typically write
>
> for (i = max; i >= 0; i--) {...}
>
> and i>=0 is always true for unsigned types.
>
> Another danger is doing any kind of arithmetic
> with 'i' and expecting a signed result.
>
> Based on my experience in getting burned by C integer
> promotion/converison rules a good rule of thumb is to
> always use just "int" unless there is a very good
> reason for not doing so (eg. if the thing is a bitmask
> or some kind of other thing where negative values
> can never ever come up).

Agreed.

An even worse antipattern is using u8 or u16 just because it's the
smallest type that is enough for the range or whatever. But then it ends
up being signed int arithmetic assigned back to the small unsigned type
anyway.

> Also IIRC there was a Linus rant about "unsigned int i"
> but I can't find it now.

Another summary at [1].


BR,
Jani.


[1] https://hamstergene.github.io/posts/2021-10-30-do-not-use-unsigned-for-nonnegativity/



-- 
Jani Nikula, Intel


More information about the Intel-gfx mailing list