Print this page
12724 update smatch to 0.6.1-rc1-il-5


 439                 ret = state1;
 440         else if (__has_merge_function(owner))
 441                 ret = __client_merge_function(owner, state1, state2);
 442         else if (state1 == &ghost)
 443                 ret = state2;
 444         else if (state2 == &ghost)
 445                 ret = state1;
 446         else if (!state1 || !state2)
 447                 ret = &undefined;
 448         else
 449                 ret = &merged;
 450         return ret;
 451 }
 452 
 453 struct sm_state *merge_sm_states(struct sm_state *one, struct sm_state *two)
 454 {
 455         struct smatch_state *s;
 456         struct sm_state *result;
 457         static int warned;
 458 



 459         if (one == two)
 460                 return one;
 461         if (out_of_memory()) {
 462                 if (!warned)
 463                         sm_warning("Function too hairy.  No more merges.");
 464                 warned = 1;
 465                 return one;
 466         }
 467         warned = 0;
 468         s = merge_states(one->owner, one->name, one->sym, one->state, two->state);
 469         result = alloc_state_no_name(one->owner, one->name, one->sym, s);
 470         result->merged = 1;
 471         result->left = one;
 472         result->right = two;
 473 
 474         copy_possibles(result, one, two);
 475 
 476         /*
 477          * The ->line information is used by deref_check where we complain about
 478          * checking pointers that have already been dereferenced.  Let's say we




 439                 ret = state1;
 440         else if (__has_merge_function(owner))
 441                 ret = __client_merge_function(owner, state1, state2);
 442         else if (state1 == &ghost)
 443                 ret = state2;
 444         else if (state2 == &ghost)
 445                 ret = state1;
 446         else if (!state1 || !state2)
 447                 ret = &undefined;
 448         else
 449                 ret = &merged;
 450         return ret;
 451 }
 452 
 453 struct sm_state *merge_sm_states(struct sm_state *one, struct sm_state *two)
 454 {
 455         struct smatch_state *s;
 456         struct sm_state *result;
 457         static int warned;
 458 
 459         if (one->state->data && !has_dynamic_states(one->owner))
 460                 sm_msg("dynamic state: %s", show_sm(one));
 461 
 462         if (one == two)
 463                 return one;
 464         if (out_of_memory()) {
 465                 if (!warned)
 466                         sm_warning("Function too hairy.  No more merges.");
 467                 warned = 1;
 468                 return one;
 469         }
 470         warned = 0;
 471         s = merge_states(one->owner, one->name, one->sym, one->state, two->state);
 472         result = alloc_state_no_name(one->owner, one->name, one->sym, s);
 473         result->merged = 1;
 474         result->left = one;
 475         result->right = two;
 476 
 477         copy_possibles(result, one, two);
 478 
 479         /*
 480          * The ->line information is used by deref_check where we complain about
 481          * checking pointers that have already been dereferenced.  Let's say we