From 7fc25fc62ee00b76fa965690558d93bdd835c769 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Fri, 15 Jan 2016 15:34:44 +0300 Subject: [PATCH] capped: better handle on unmatched state Say we have an unmatched state then we can look at smatch_extra.c information to see if that side is capped. Signed-off-by: Dan Carpenter --- smatch_capped.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/smatch_capped.c b/smatch_capped.c index ab8a0d39..aaf79399 100644 --- a/smatch_capped.c +++ b/smatch_capped.c @@ -26,12 +26,23 @@ #include "smatch.h" #include "smatch_slist.h" +#include "smatch_extra.h" static int my_id; STATE(capped); STATE(uncapped); +static struct smatch_state *unmatched_state(struct sm_state *sm) +{ + struct smatch_state *state; + + state = get_state(SMATCH_EXTRA, sm->name, sm->sym); + if (state && !estate_is_whole(state)) + return &capped; + return &uncapped; +} + static int is_capped_macro(struct expression *expr) { char *name; @@ -252,6 +263,7 @@ void register_capped(int id) { my_id = id; + add_unmatched_state_hook(my_id, &unmatched_state); select_caller_info_hook(set_param_capped_data, CAPPED_DATA); add_hook(&match_condition, CONDITION_HOOK); add_hook(&match_assign, ASSIGNMENT_HOOK); -- 2.11.4.GIT