From 500af2d98b5564946ac53e1b2c38ae8b064fa5bb Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Wed, 11 Feb 2009 23:32:29 +0300 Subject: [PATCH] Clean ups. Comments. Rename slist_stack to named_stack. There is a struct called state_list_stack. The slist_stack was different and only for gotos so it was a terrible name. Signed-off-by: Dan Carpenter --- smatch_slist.c | 22 +++++++++++++++------- smatch_slist.h | 4 ++-- smatch_states.c | 6 +++--- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/smatch_slist.c b/smatch_slist.c index 2de18cee..32c18bd5 100644 --- a/smatch_slist.c +++ b/smatch_slist.c @@ -538,12 +538,12 @@ void filter(struct state_list **slist, struct state_list *filter) } /* - * This function is basically the same as popping the top two slists, + * and_slist_stack() is basically the same as popping the top two slists, * overwriting the one with the other and pushing it back on the stack. * The difference is that it checks to see that a mutually exclusive - * state isn't included in both stacks. + * state isn't included in both stacks. If smatch sees something like + * "if (a && !a)" it prints a warning. */ - void and_slist_stack(struct state_list_stack **slist_stack) { struct sm_state *tmp; @@ -564,11 +564,18 @@ void and_slist_stack(struct state_list_stack **slist_stack) } set_state_stack(slist_stack, tmp->name, tmp->owner, tmp->sym, tmp->state); - } END_FOR_EACH_PTR(tmp); del_slist(&tmp_slist); } +/* + * or_slist_stack() is for if we have: if (foo || bar) { foo->baz; + * It pops the two slists from the top of the stack and merges them + * together in a way that preserves the things they have in common + * but creates a merged state for most of the rest. + * You could have code that had: if (foo || foo) { foo->baz; + * It's this function which ensures smatch does the right thing. + */ void or_slist_stack(struct state_list_stack **slist_stack) { struct state_list *one; @@ -587,7 +594,6 @@ void or_slist_stack(struct state_list_stack **slist_stack) set_state_slist(&res, tmp->name, tmp->owner, tmp->sym, s); } END_FOR_EACH_PTR(tmp); - FOR_EACH_PTR(two, tmp) { s = get_state_slist(one, tmp->name, tmp->owner, tmp->sym); s = merge_states(tmp->name, tmp->owner, tmp->sym, @@ -601,7 +607,10 @@ void or_slist_stack(struct state_list_stack **slist_stack) del_slist(&two); } -struct state_list **get_slist_from_slist_stack(struct slist_stack *stack, +/* + * get_slist_from_named_stack() is only used for gotos. + */ +struct state_list **get_slist_from_named_stack(struct named_stack *stack, const char *name) { struct named_slist *tmp; @@ -621,4 +630,3 @@ void overwrite_slist(struct state_list *from, struct state_list **to) overwrite_sm_state(to, tmp); } END_FOR_EACH_PTR(tmp); } - diff --git a/smatch_slist.h b/smatch_slist.h index 09533261..03e794cd 100644 --- a/smatch_slist.h +++ b/smatch_slist.h @@ -21,7 +21,7 @@ struct named_slist { struct state_list *slist; }; DECLARE_ALLOCATOR(named_slist); -DECLARE_PTR_LIST(slist_stack, struct named_slist); +DECLARE_PTR_LIST(named_stack, struct named_slist); extern struct state_list_stack *implied_pools; @@ -80,7 +80,7 @@ void and_slist_stack(struct state_list_stack **slist_stack); void or_slist_stack(struct state_list_stack **slist_stack); -struct state_list **get_slist_from_slist_stack(struct slist_stack *stack, +struct state_list **get_slist_from_named_stack(struct named_stack *stack, const char *name); void overwrite_slist(struct state_list *from, struct state_list **to); diff --git a/smatch_states.c b/smatch_states.c index e9f43682..32d477fd 100644 --- a/smatch_states.c +++ b/smatch_states.c @@ -49,7 +49,7 @@ static struct state_list_stack *default_stack; static struct state_list_stack *continue_stack; static struct state_list_stack *false_only_stack; -static struct slist_stack *goto_stack; +static struct named_stack *goto_stack; struct state_list_stack *implied_pools; @@ -483,7 +483,7 @@ void __save_gotos(const char *name) { struct state_list **slist; - slist = get_slist_from_slist_stack(goto_stack, name); + slist = get_slist_from_named_stack(goto_stack, name); if (slist) { merge_slist(slist, cur_slist); return; @@ -501,7 +501,7 @@ void __merge_gotos(const char *name) { struct state_list **slist; - slist = get_slist_from_slist_stack(goto_stack, name); + slist = get_slist_from_named_stack(goto_stack, name); if (slist) merge_slist(&cur_slist, *slist); } -- 2.11.4.GIT