2007-06-06 18:29:48

by Kok, Auke

[permalink] [raw]
Subject: generic bool and sparse errors?


I'm experimenting with using the generic bool type and using sparse I get tons
of these messages:

warning: incorrect type in argument 4 (different signedness)
expected bool [unsigned] [usertype] *[unsigned] success
got bool *<noident>

I'm not really worried about this, I assume that sparse hasn't caught up with
what bool really means, but perhaps this can be looked into by someone who knows
sparse well. The warnings don't really add up and with more people switching to
use the generic bool this may beceome unwanted.

alternatively we might need to reconsider the `typedef _Bool bool;` declaration
and force it to be unsigned. I'm not sure what to think of that.

Cheers,

Auke


2007-06-06 19:00:36

by Jeff Garzik

[permalink] [raw]
Subject: Re: generic bool and sparse errors?

On Wed, Jun 06, 2007 at 11:29:30AM -0700, Kok, Auke wrote:
> alternatively we might need to reconsider the `typedef _Bool bool;`
> declaration and force it to be unsigned. I'm not sure what to think of that.

That's the C99 standard declaration IIRC. Probably just need to __force
it to something for sparse, deep in the bowels of kernel headers...

Jeff



2007-06-06 19:21:54

by Richard Knutsson

[permalink] [raw]
Subject: Re: generic bool and sparse errors?

Kok, Auke wrote:
>
> I'm experimenting with using the generic bool type and using sparse I
> get tons of these messages:
>
> warning: incorrect type in argument 4 (different signedness)
> expected bool [unsigned] [usertype] *[unsigned] success
> got bool *<noident>
>
> I'm not really worried about this, I assume that sparse hasn't caught
> up with what bool really means, but perhaps this can be looked into by
> someone who knows sparse well. The warnings don't really add up and
> with more people switching to use the generic bool this may beceome
> unwanted.
Actually, I am "assigned" to that. :)
Just out of curiousity, where do you see those messages? In the log for
allyesconfig on i386 I only found ntfs/super.c with similar output.
>
> alternatively we might need to reconsider the `typedef _Bool bool;`
> declaration and force it to be unsigned. I'm not sure what to think of
> that.
I do not see how that would make any sense.

Richard Knutsson

2007-06-06 20:17:56

by Kok, Auke

[permalink] [raw]
Subject: Re: generic bool and sparse errors?

Richard Knutsson wrote:
> Kok, Auke wrote:
>> I'm experimenting with using the generic bool type and using sparse I
>> get tons of these messages:
>>
>> warning: incorrect type in argument 4 (different signedness)
>> expected bool [unsigned] [usertype] *[unsigned] success
>> got bool *<noident>
>>
>> I'm not really worried about this, I assume that sparse hasn't caught
>> up with what bool really means, but perhaps this can be looked into by
>> someone who knows sparse well. The warnings don't really add up and
>> with more people switching to use the generic bool this may beceome
>> unwanted.
>
> Actually, I am "assigned" to that. :)

ah cool

> Just out of curiousity, where do you see those messages? In the log for
> allyesconfig on i386 I only found ntfs/super.c with similar output.

I was poking around replacing the boolean_t typedef in e1000, so it's nothing
upstream. Just run `sed -i s/boolean_t/bool/g` on all the files in
drivers/net/e1000 to see :)

the version of sparse is that in fc6, so that may be out-of-date (?).

>> alternatively we might need to reconsider the `typedef _Bool bool;`
>> declaration and force it to be unsigned. I'm not sure what to think of
>> that.
> I do not see how that would make any sense.

well the sparse warning is about signedness. Either sparse needs to "know" that
bool is unsigned, or the kernel headers need to somehow make bool unsigned...
the latter choice would come down to just that, but it doesn't look like a good
idea to me either somehow.

Auke

2007-06-06 20:24:23

by Al Viro

[permalink] [raw]
Subject: Re: generic bool and sparse errors?

On Wed, Jun 06, 2007 at 01:17:44PM -0700, Kok, Auke wrote:
> well the sparse warning is about signedness. Either sparse needs to "know"
> that bool is unsigned, or the kernel headers need to somehow make bool
> unsigned... the latter choice would come down to just that, but it doesn't
> look like a good idea to me either somehow.

sparse treats _Bool as 1-bit integer type. It's considerably more
complicated beast; for one thing (_Bool)2 is 1, not 0. For another,
several places make unpleasant assumptions that size in bits is a
multiple of bits_in_char. Which would be fine, but sparse has it
set to 1 for _Bool. With obvious results...