Print this page
new smatch
*** 64,96 ****
struct smatch_state *state;
if (parent_is_gone_var_sym(sm->name, sm->sym))
return alloc_estate_empty();
! state = get_state(SMATCH_EXTRA, sm->name, sm->sym);
if (state)
return state;
return alloc_estate_whole(estate_type(sm->state));
}
! static void pre_merge_hook(struct sm_state *sm)
{
! struct smatch_state *extra, *mine;
struct range_list *rl;
! if (estate_rl(sm->state))
return;
! extra = get_state(SMATCH_EXTRA, sm->name, sm->sym);
if (!extra)
return;
- mine = get_state(my_id, sm->name, sm->sym);
! rl = rl_intersection(estate_rl(extra), estate_rl(mine));
! if (rl_equiv(rl, estate_rl(mine)))
return;
! set_state(my_id, sm->name, sm->sym, alloc_estate_rl(clone_rl(rl)));
}
static void extra_mod_hook(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
{
int param;
--- 64,95 ----
struct smatch_state *state;
if (parent_is_gone_var_sym(sm->name, sm->sym))
return alloc_estate_empty();
! state = __get_state(SMATCH_EXTRA, sm->name, sm->sym);
if (state)
return state;
return alloc_estate_whole(estate_type(sm->state));
}
! static void pre_merge_hook(struct sm_state *cur, struct sm_state *other)
{
! struct smatch_state *extra;
struct range_list *rl;
! if (estate_rl(other->state))
return;
! extra = get_state(SMATCH_EXTRA, cur->name, cur->sym);
if (!extra)
return;
! rl = rl_intersection(estate_rl(extra), estate_rl(cur->state));
! if (rl_equiv(rl, estate_rl(cur->state)))
return;
! set_state(my_id, cur->name, cur->sym, alloc_estate_rl(clone_rl(rl)));
}
static void extra_mod_hook(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
{
int param;