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;