From c2bec634d42a236bcc3a22b0b5359cf6a311e7c3 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Mon, 10 May 2010 07:37:13 +0200 Subject: [PATCH] known_condition_true/false(): handle expression statements Handle things like if (({frob(); frob(); 1})) { ... Signed-off-by: Dan Carpenter --- smatch_extra.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/smatch_extra.c b/smatch_extra.c index 969df1c2..bbb5ea9f 100644 --- a/smatch_extra.c +++ b/smatch_extra.c @@ -856,6 +856,7 @@ exit: int known_condition_true(struct expression *expr) { long long tmp; + struct statement *stmt; if (!expr) return 0; @@ -871,6 +872,9 @@ int known_condition_true(struct expression *expr) return 1; break; } + stmt = get_expression_statement(expr); + if (last_stmt_val(stmt, &tmp) && tmp == 1) + return 1; break; default: break; @@ -880,6 +884,9 @@ int known_condition_true(struct expression *expr) int known_condition_false(struct expression *expr) { + long long tmp; + struct statement *stmt; + if (!expr) return 0; @@ -893,6 +900,9 @@ int known_condition_false(struct expression *expr) return 1; break; } + stmt = get_expression_statement(expr); + if (last_stmt_val(stmt, &tmp) && tmp == 0) + return 1; break; default: break; -- 2.11.4.GIT