From b51adcda1986f063d5d4b30415f8b7afb9f25140 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Tue, 21 Feb 2012 15:15:24 +0300 Subject: [PATCH] estate: introduce estate_min/max() These replace get_dinfo_min/max(). Signed-off-by: Dan Carpenter --- check_err_ptr_deref.c | 4 ++-- smatch_estate.c | 10 ++++++++++ smatch_extra.c | 26 +++++++++----------------- smatch_extra.h | 4 ++-- smatch_math.c | 8 ++++---- smatch_ranges.c | 14 -------------- 6 files changed, 27 insertions(+), 39 deletions(-) diff --git a/check_err_ptr_deref.c b/check_err_ptr_deref.c index 7b23084d..6101151b 100644 --- a/check_err_ptr_deref.c +++ b/check_err_ptr_deref.c @@ -124,10 +124,10 @@ static void match_err_ptr(const char *fn, struct expression *expr, void *unused) if (!sm) return; FOR_EACH_PTR(sm->possible, tmp) { - tmp_min = get_dinfo_min(get_dinfo(tmp->state)); + tmp_min = estate_min(tmp->state); if (tmp_min != whole_range.min && tmp_min < min) min = tmp_min; - tmp_max = get_dinfo_max(get_dinfo(tmp->state)); + tmp_max = estate_max(tmp->state); if (tmp_max != whole_range.max && tmp_max > max) max = tmp_max; } END_FOR_EACH_PTR(tmp); diff --git a/smatch_estate.c b/smatch_estate.c index 354441cd..694fd615 100644 --- a/smatch_estate.c +++ b/smatch_estate.c @@ -49,6 +49,16 @@ struct related_list *estate_related(struct smatch_state *state) return get_dinfo(state)->related; } +long long estate_min(struct smatch_state *state) +{ + return rl_min(estate_ranges(state)); +} + +long long estate_max(struct smatch_state *state) +{ + return rl_max(estate_ranges(state)); +} + static struct data_info *alloc_dinfo(void) { struct data_info *ret; diff --git a/smatch_extra.c b/smatch_extra.c index 53a13d7d..53537a94 100644 --- a/smatch_extra.c +++ b/smatch_extra.c @@ -189,9 +189,9 @@ static struct sm_state *handle_canonical_while_count_down(struct statement *loop sm = get_sm_state_expr(SMATCH_EXTRA, iter_var); if (!sm) return NULL; - if (get_dinfo_min(get_dinfo(sm->state)) < 0) + if (estate_min(sm->state) < 0) return NULL; - start = get_dinfo_max(get_dinfo(sm->state)); + start = estate_max(sm->state); if (start <= 0) return NULL; if (start != whole_range.max) @@ -333,7 +333,7 @@ static void while_count_down_after(struct sm_state *sm, struct expression *condi return; if (condition->op != SPECIAL_DECREMENT) return; - after_value = get_dinfo_min(get_dinfo(sm->state)); + after_value = estate_min(sm->state); after_value--; set_extra_mod(sm->name, sm->sym, alloc_estate(after_value)); } @@ -348,7 +348,6 @@ void __extra_pre_loop_hook_after(struct sm_state *sm, long long value; int left = 0; struct smatch_state *state; - struct data_info *dinfo; long long min, max; if (!iterator) { @@ -374,9 +373,8 @@ void __extra_pre_loop_hook_after(struct sm_state *sm, if (sym != sm->sym || strcmp(name, sm->name)) goto free; state = get_state(my_id, name, sym); - dinfo = get_dinfo(state); - min = get_dinfo_min(dinfo); - max = get_dinfo_max(dinfo); + min = estate_min(state); + max = estate_max(state); if (iter_expr->op == SPECIAL_INCREMENT && min != whole_range.min && max == whole_range.max) { @@ -538,11 +536,8 @@ static void reset_struct_members(const char *name, struct symbol *sym, struct ex static struct smatch_state *increment_state(struct smatch_state *state) { - long long min; - long long max; - - min = get_dinfo_min(get_dinfo(state)); - max = get_dinfo_max(get_dinfo(state)); + long long min = estate_min(state); + long long max = estate_max(state); if (inside_loop()) max = whole_range.max; @@ -556,11 +551,8 @@ static struct smatch_state *increment_state(struct smatch_state *state) static struct smatch_state *decrement_state(struct smatch_state *state) { - long long min; - long long max; - - min = get_dinfo_min(get_dinfo(state)); - max = get_dinfo_max(get_dinfo(state)); + long long min = estate_min(state); + long long max = estate_max(state); if (inside_loop()) min = whole_range.min; diff --git a/smatch_extra.h b/smatch_extra.h index c205143d..3c842e3b 100644 --- a/smatch_extra.h +++ b/smatch_extra.h @@ -73,12 +73,12 @@ struct range_list *get_range_list(struct expression *expr); struct data_info *get_dinfo(struct smatch_state *state); struct range_list *estate_ranges(struct smatch_state *state); struct related_list *estate_related(struct smatch_state *state); +long long estate_min(struct smatch_state *state); +long long estate_max(struct smatch_state *state); struct smatch_state *add_filter(struct smatch_state *orig, long long filter); struct smatch_state *extra_undefined(void); struct range_list *range_list_union(struct range_list *one, struct range_list *two); -long long get_dinfo_min(struct data_info *dinfo); -long long get_dinfo_max(struct data_info *dinfo); int get_single_value_from_dinfo(struct data_info *dinfo, long long *val); void function_comparison(int comparison, struct expression *expr, long long value, int left); diff --git a/smatch_math.c b/smatch_math.c index 058b58d5..4ec3f185 100644 --- a/smatch_math.c +++ b/smatch_math.c @@ -184,12 +184,12 @@ static int get_implied_value_helper(struct expression *expr, long long *val, int if (what == IMPLIED) return get_single_value_from_dinfo(get_dinfo(state), val); if (what == IMPLIED_MAX) { - *val = get_dinfo_max(get_dinfo(state)); + *val = estate_max(state); if (*val == whole_range.max) /* this means just guessing */ return 0; return 1; } - *val = get_dinfo_min(get_dinfo(state)); + *val = estate_min(state); if (*val == whole_range.min) return 0; return 1; @@ -211,7 +211,7 @@ static int get_fuzzy_max_helper(struct expression *expr, long long *max) FOR_EACH_PTR(sm->possible, tmp) { long long new_min; - new_min = get_dinfo_min(get_dinfo(tmp->state)); + new_min = estate_min(tmp->state); if (new_min > *max) *max = new_min; } END_FOR_EACH_PTR(tmp); @@ -237,7 +237,7 @@ static int get_fuzzy_min_helper(struct expression *expr, long long *min) FOR_EACH_PTR(sm->possible, tmp) { long long new_max; - new_max = get_dinfo_max(get_dinfo(tmp->state)); + new_max = estate_max(tmp->state); if (new_max < *min) *min = new_max; } END_FOR_EACH_PTR(tmp); diff --git a/smatch_ranges.c b/smatch_ranges.c index 95f794bf..72a91b94 100644 --- a/smatch_ranges.c +++ b/smatch_ranges.c @@ -331,20 +331,6 @@ struct range_list *remove_range(struct range_list *list, long long min, long lon return ret; } -long long get_dinfo_min(struct data_info *dinfo) -{ - if (!dinfo) - return whole_range.min; - return rl_min(dinfo->value_ranges); -} - -long long get_dinfo_max(struct data_info *dinfo) -{ - if (!dinfo) - return whole_range.max; - return rl_max(dinfo->value_ranges); -} - /* * if it can be only one and only value return 1, else return 0 */ -- 2.11.4.GIT