On Wed, May 4, 2011 at 4:39 PM, Ben Pfaff <blp@xxxxxxxxxx> wrote: > Without this commit, sizeof(_Bool) provokes an error with "cannot size > expression" because _Bool is a 1-bit type and thus not a multiple of a full > byte in size. But sizeof(_Bool) is valid C that should evaluate to 1, so > this commit fixes the problem and adds a regression test. Thanks for the patch. The sizeof _Bool is implementation define. Gcc make sizeof(_Bool) as 1. I modify your patch to issue an warning. Applied and pushed. The incremental change follows. Please check that works for you or not. Chris diff --git a/evaluate.c b/evaluate.c index f196dbc..1309001 100644 --- a/evaluate.c +++ b/evaluate.c @@ -2028,14 +2028,18 @@ static struct symbol *evaluate_sizeof(struct expression *expr) size = bits_in_char; } + if (size == 1 && is_bool_type(type)) { + warning(expr->pos, "expression using sizeof bool"); + size = bits_in_char; + } + if (is_function(type->ctype.base_type)) { warning(expr->pos, "expression using sizeof on a function"); size = bits_in_char; } - if (is_bool_type(type)) - size = bits_in_char; - else if ((size < 0) || (size & (bits_in_char - 1))) + + if ((size < 0) || (size & (bits_in_char - 1))) expression_error(expr, "cannot size expression"); expr->type = EXPR_VALUE; diff --git a/validation/sizeof-bool.c b/validation/sizeof-bool.c index dfcb12a..6c68748 100644 --- a/validation/sizeof-bool.c +++ b/validation/sizeof-bool.c @@ -6,4 +6,7 @@ static int a(void) * check-name: sizeof(_Bool) is valid * check-description: sizeof(_Bool) was rejected because _Bool is not an even * number of bytes + * check-error-start +sizeof-bool.c:3:16: warning: expression using sizeof bool + * check-error-end */ -- 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