From 7ff06ce4217fcd0a21f46b5a7fa8aef44eed515a Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Mon, 20 May 2013 19:45:05 +0300 Subject: [PATCH] math: introduce handle_expression_statement_rl() The original handle_expression_statement() could only handle known values but the new version handles implied values as well. Signed-off-by: Dan Carpenter --- smatch_math.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/smatch_math.c b/smatch_math.c index c60d5d77..ec375cd2 100644 --- a/smatch_math.c +++ b/smatch_math.c @@ -94,6 +94,22 @@ static int opposite_implied(int implied) return implied; } +static struct range_list *last_stmt_rl(struct statement *stmt, int implied) +{ + if (!stmt) + return NULL; + + stmt = last_ptr_list((struct ptr_list *)stmt->stmts); + if (stmt->type != STMT_EXPRESSION) + return NULL; + return _get_rl(stmt->expression, implied); +} + +static struct range_list *handle_expression_statement_rl(struct expression *expr, int implied) +{ + return last_stmt_rl(get_expression_statement(expr), implied); +} + static int last_stmt_sval(struct statement *stmt, sval_t *sval) { struct expression *expr; @@ -222,8 +238,7 @@ static struct range_list *handle_preop_rl(struct expression *expr, int implied) case '*': return handle_variable(expr, implied); case '(': - ret = handle_expression_statement(expr, &undefined, implied); - break; + return handle_expression_statement_rl(expr, implied); default: return NULL; } -- 2.11.4.GIT