From 9097e456410631485d404efbeda6e289167c3443 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Tue, 20 Nov 2012 14:44:10 +0300 Subject: [PATCH] extra: math: move get_implied_range_list() to smatch_math.c This feels more math-y to me. Signed-off-by: Dan Carpenter --- smatch_extra.c | 48 ------------------------------------------------ smatch_math.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/smatch_extra.c b/smatch_extra.c index 9f7b7e57..630b0eaa 100644 --- a/smatch_extra.c +++ b/smatch_extra.c @@ -953,54 +953,6 @@ int implied_not_equal(struct expression *expr, long long val) return !possibly_false(expr, SPECIAL_NOTEQUAL, value_expr(val)); } -int get_implied_range_list(struct expression *expr, struct range_list **rl) -{ - sval_t sval; - struct smatch_state *state; - sval_t min, max; - - *rl = NULL; - - expr = strip_parens(expr); - if (!expr) - return 0; - - state = get_state_expr(my_id, expr); - if (state) { - *rl = clone_range_list(estate_ranges(state)); - return 1; - } - - if (expr->type == EXPR_CALL) { - if (get_implied_return(expr, rl)) - return 1; - *rl = db_return_vals(expr); - if (*rl) - return 1; - return 0; - } - - if (get_implied_value(expr, &sval)) { - add_range(rl, sval, sval); - return 1; - } - - if (expr->type == EXPR_BINOP && expr->op == '%') { - if (!get_implied_value(expr->right, &sval)) - return 0; - add_range(rl, ll_to_sval(0), ll_to_sval(sval.value - 1)); - return 1; - } - - if (!get_implied_min(expr, &min)) - return 0; - if (!get_implied_max(expr, &max)) - return 0; - - *rl = alloc_range_list(min, max); - return 1; -} - static struct symbol *get_arg_type(struct expression *fn, int arg) { struct symbol *fn_type; diff --git a/smatch_math.c b/smatch_math.c index 355d294c..2afb05f2 100644 --- a/smatch_math.c +++ b/smatch_math.c @@ -659,6 +659,54 @@ int get_implied_max(struct expression *expr, sval_t *sval) return 1; } +int get_implied_range_list(struct expression *expr, struct range_list **rl) +{ + sval_t sval; + struct smatch_state *state; + sval_t min, max; + + *rl = NULL; + + expr = strip_parens(expr); + if (!expr) + return 0; + + state = get_state_expr(SMATCH_EXTRA, expr); + if (state) { + *rl = clone_range_list(estate_ranges(state)); + return 1; + } + + if (expr->type == EXPR_CALL) { + if (get_implied_return(expr, rl)) + return 1; + *rl = db_return_vals(expr); + if (*rl) + return 1; + return 0; + } + + if (get_implied_value(expr, &sval)) { + add_range(rl, sval, sval); + return 1; + } + + if (expr->type == EXPR_BINOP && expr->op == '%') { + if (!get_implied_value(expr->right, &sval)) + return 0; + add_range(rl, ll_to_sval(0), ll_to_sval(sval.value - 1)); + return 1; + } + + if (!get_implied_min(expr, &min)) + return 0; + if (!get_implied_max(expr, &max)) + return 0; + + *rl = alloc_range_list(min, max); + return 1; +} + int get_hard_max(struct expression *expr, sval_t *sval) { int undefined = 0; -- 2.11.4.GIT