On Fri, Aug 26, 2011 at 6:59 AM, Christopher Li <sparse@xxxxxxxxxxx> wrote: > On Mon, Aug 22, 2011 at 6:57 AM, Pekka Enberg <penberg@xxxxxxxxxx> wrote: >> The value of 'ctype->bit_size' is set to 1 for booleans which confuses the i386 >> backend: >> >> ./compile allocate.c >> compile: compile-i386.c:1406: emit_binop: Assertion `0' failed. >> Aborted >> >> Looking at the code, we assume that "bit_size / 8" gives a sane result on >> various places. This patch fixes the problem by bumping bit_size to 8 for >> booleans. This also makes sizeof(_Bool) return 1 which is consistent with what >> GCC 4.4.3, for example, does. >> >> diff --git a/target.c b/target.c >> index 17b228a..6a535bc 100644 >> --- a/target.c >> +++ b/target.c >> @@ -14,7 +14,7 @@ int max_alignment = 16; >> /* >> * Integer data types >> */ >> -int bits_in_bool = 1; >> +int bits_in_bool = 8; > > I object this part. I consider the sizeof(_Bool) == 1 as external behaviour. > But internally we should know that the real useful part of bool is in just one > bit, not any bit of that 1 byte storage. You missed the most important part of my reasoning: sparse code already expects "bit_size / 8" to return a non-zero number and it's not just compile-i386.c! So while I don't disagree with you that we should internally know that a bool is just one bit, I don't consider that to be relevant for this particular patch. Pekka -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html