returns: provide a split out list of all the return states
commit234b6d36cafd60c0422cc6c8253a0808c58fd77c
authorDan Carpenter <dan.carpenter@oracle.com>
Tue, 24 May 2016 09:22:16 +0000 (24 12:22 +0300)
committerDan Carpenter <dan.carpenter@oracle.com>
Tue, 24 May 2016 09:23:33 +0000 (24 12:23 +0300)
tree7ba02acf270855861084bd956c7b6164d593e046
parent2ba8b972faba019129da2769ca7dc990edd6d918
returns: provide a split out list of all the return states

Take check_locking.c as an example, we want to look at the return states
and say "Are we locked for some returns and not for others?"  But it's ok
to return unlocked if we fail and locked if we return zero.  There are a
bunch of other things besides locking where we could use this information.

So the other thing that's going on here is that we have to record the range
of return values that we returning so that we can tell error returns from
success returns.  That's stored in:

get_state(RETURN_ID, "return_ranges", NULL);

I considered saving an expression or a statement instead but it didn't work
and really what we want is just the ranges.

How you use this is you do something like this:

        FOR_EACH_PTR(get_all_return_strees(), stree) {
                return_sm = get_sm_state_stree(stree, RETURN_ID, "return_ranges", NULL);
                if (!return_sm)
                        continue;
                line.value = return_sm->line;

....

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
check_list.h
smatch.h
smatch_db.c
smatch_returns.c