From b94b83f784ffc84d8e4905656546b7e7fe13c82f Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Mon, 10 May 2010 16:41:05 +0200 Subject: [PATCH] precedence: don't complain about if foo is 0-1 Previously smatch would not complain about "if (!foo = bar()) {" if either "foo" or "bar()" was of type boolean. But sometimes people use variables as boolean even though the type is not declared as boolean. If we can tell that foo is only either 0 or 1 even without looking at the type then do not complain. Signed-off-by: Dan Carpenter --- check_precedence.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/check_precedence.c b/check_precedence.c index 5cbe036a..8c1ce5d7 100644 --- a/check_precedence.c +++ b/check_precedence.c @@ -23,6 +23,17 @@ static int is_bool(struct expression *expr) return 0; } +static int is_bool_from_context(struct expression *expr) +{ + long long val; + + if (!get_implied_max(expr, &val) || val > 1) + return 0; + if (!get_implied_min(expr, &val) || val < 0) + return 0; + return 1; +} + static int is_bool_op(struct expression *expr) { expr = strip_expr(expr); @@ -52,6 +63,8 @@ static void match_condition(struct expression *expr) return; if (is_bool(expr->left->unop)) return; + if (is_bool_from_context(expr->left->unop)) + return; print = 1; } } -- 2.11.4.GIT