Print this page
11972 resync smatch
*** 39,50 ****
int i;
if (!sm)
return "<none>";
! pos = snprintf(buf, sizeof(buf), "[%s] '%s' = '%s'",
! check_name(sm->owner), sm->name, show_state(sm->state));
if (pos > sizeof(buf))
goto truncate;
if (ptr_list_size((struct ptr_list *)sm->possible) == 1)
return buf;
--- 39,51 ----
int i;
if (!sm)
return "<none>";
! pos = snprintf(buf, sizeof(buf), "[%s] %s = '%s'%s",
! check_name(sm->owner), sm->name, show_state(sm->state),
! sm->merged ? " [merged]" : "");
if (pos > sizeof(buf))
goto truncate;
if (ptr_list_size((struct ptr_list *)sm->possible) == 1)
return buf;
*** 689,707 ****
--- 690,712 ----
struct state_list *add_to_one = NULL;
struct state_list *add_to_two = NULL;
AvlIter one_iter;
AvlIter two_iter;
+ __set_cur_stree_readonly();
+
avl_iter_begin(&one_iter, *one, FORWARD);
avl_iter_begin(&two_iter, *two, FORWARD);
for (;;) {
if (!one_iter.sm && !two_iter.sm)
break;
if (cmp_tracker(one_iter.sm, two_iter.sm) < 0) {
__set_fake_cur_stree_fast(*two);
+ __in_unmatched_hook++;
tmp_state = __client_unmatched_state_function(one_iter.sm);
+ __in_unmatched_hook--;
__pop_fake_cur_stree_fast();
sm = alloc_state_no_name(one_iter.sm->owner, one_iter.sm->name,
one_iter.sm->sym, tmp_state);
add_ptr_list(&add_to_two, sm);
avl_iter_next(&one_iter);
*** 708,726 ****
--- 713,735 ----
} else if (cmp_tracker(one_iter.sm, two_iter.sm) == 0) {
avl_iter_next(&one_iter);
avl_iter_next(&two_iter);
} else {
__set_fake_cur_stree_fast(*one);
+ __in_unmatched_hook++;
tmp_state = __client_unmatched_state_function(two_iter.sm);
+ __in_unmatched_hook--;
__pop_fake_cur_stree_fast();
sm = alloc_state_no_name(two_iter.sm->owner, two_iter.sm->name,
two_iter.sm->sym, tmp_state);
add_ptr_list(&add_to_one, sm);
avl_iter_next(&two_iter);
}
}
+ __set_cur_stree_writable();
+
FOR_EACH_PTR(add_to_one, sm) {
avl_insert(one, sm);
} END_FOR_EACH_PTR(sm);
FOR_EACH_PTR(add_to_two, sm) {
*** 731,763 ****
free_slist(&add_to_two);
}
static void call_pre_merge_hooks(struct stree **one, struct stree **two)
{
! struct sm_state *sm, *other;
! save_all_states();
! __swap_cur_stree(*one);
FOR_EACH_SM(*two, sm) {
! other = get_sm_state(sm->owner, sm->name, sm->sym);
! if (other == sm)
continue;
! call_pre_merge_hook(sm);
} END_FOR_EACH_SM(sm);
! *one = clone_stree(__get_cur_stree());
! __swap_cur_stree(*two);
FOR_EACH_SM(*one, sm) {
! other = get_sm_state(sm->owner, sm->name, sm->sym);
! if (other == sm)
continue;
! call_pre_merge_hook(sm);
} END_FOR_EACH_SM(sm);
! *two = clone_stree(__get_cur_stree());
! restore_all_states();
}
static void clone_pool_havers_stree(struct stree **stree)
{
struct sm_state *sm, *tmp;
--- 740,781 ----
free_slist(&add_to_two);
}
static void call_pre_merge_hooks(struct stree **one, struct stree **two)
{
! struct sm_state *sm, *cur;
! struct stree *new;
! __in_unmatched_hook++;
! __set_fake_cur_stree_fast(*one);
! __push_fake_cur_stree();
FOR_EACH_SM(*two, sm) {
! cur = get_sm_state(sm->owner, sm->name, sm->sym);
! if (cur == sm)
continue;
! call_pre_merge_hook(cur, sm);
} END_FOR_EACH_SM(sm);
! new = __pop_fake_cur_stree();
! overwrite_stree(new, one);
! free_stree(&new);
! __pop_fake_cur_stree_fast();
! __set_fake_cur_stree_fast(*two);
! __push_fake_cur_stree();
FOR_EACH_SM(*one, sm) {
! cur = get_sm_state(sm->owner, sm->name, sm->sym);
! if (cur == sm)
continue;
! call_pre_merge_hook(cur, sm);
} END_FOR_EACH_SM(sm);
! new = __pop_fake_cur_stree();
! overwrite_stree(new, two);
! free_stree(&new);
! __pop_fake_cur_stree_fast();
! __in_unmatched_hook--;
}
static void clone_pool_havers_stree(struct stree **stree)
{
struct sm_state *sm, *tmp;