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

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/smatch_flow.c
          +++ new/usr/src/tools/smatch/src/smatch_flow.c
↓ open down ↓ 430 lines elided ↑ open up ↑
 431  431                  expr_set_parent_expr(expr->right, expr);
 432  432  
 433  433                  right = strip_expr(expr->right);
 434  434                  if (!right)
 435  435                          break;
 436  436  
 437  437                  __pass_to_client(expr, RAW_ASSIGNMENT_HOOK);
 438  438  
 439  439                  /* foo = !bar() */
 440  440                  if (__handle_condition_assigns(expr))
 441      -                        break;
      441 +                        goto after_assign;
 442  442                  /* foo = (x < 5 ? foo : 5); */
 443  443                  if (__handle_select_assigns(expr))
 444      -                        break;
      444 +                        goto after_assign;
 445  445                  /* foo = ({frob(); frob(); frob(); 1;}) */
 446  446                  if (__handle_expr_statement_assigns(expr))
 447      -                        break;
      447 +                        break;  // FIXME: got after
 448  448                  /* foo = (3, 4); */
 449  449                  if (handle_comma_assigns(expr))
 450      -                        break;
 451      -                if (handle_postop_assigns(expr))
 452      -                        break;
      450 +                        goto after_assign;
 453  451                  if (handle__builtin_choose_expr_assigns(expr))
 454      -                        break;
      452 +                        goto after_assign;
      453 +                if (handle_postop_assigns(expr))
      454 +                        break;  /* no need to goto after_assign */
 455  455  
 456  456                  __split_expr(expr->right);
 457  457                  if (outside_of_function())
 458  458                          __pass_to_client(expr, GLOBAL_ASSIGNMENT_HOOK);
 459  459                  else
 460  460                          __pass_to_client(expr, ASSIGNMENT_HOOK);
 461  461  
 462  462                  __fake_struct_member_assignments(expr);
 463  463  
 464  464                  /* Re-examine ->right for inlines.  See the commit message */
 465  465                  right = strip_expr(expr->right);
 466  466                  if (expr->op == '=' && right->type == EXPR_CALL)
 467  467                          __pass_to_client(expr, CALL_ASSIGNMENT_HOOK);
 468  468  
 469  469                  if (get_macro_name(right->pos) &&
 470  470                      get_macro_name(expr->pos) != get_macro_name(right->pos))
 471  471                          __pass_to_client(expr, MACRO_ASSIGNMENT_HOOK);
 472  472  
      473 +after_assign:
 473  474                  __pass_to_client(expr, ASSIGNMENT_HOOK_AFTER);
 474      -
 475  475                  __split_expr(expr->left);
 476  476                  break;
 477  477          }
 478  478          case EXPR_DEREF:
 479  479                  expr_set_parent_expr(expr->deref, expr);
 480  480  
 481  481                  __pass_to_client(expr, DEREF_HOOK);
 482  482                  __split_expr(expr->deref);
 483  483                  break;
 484  484          case EXPR_SLICE:
↓ open down ↓ 1460 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX