Print this page
11972 resync smatch

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/smatch_returns.c
          +++ new/usr/src/tools/smatch/src/smatch_returns.c
↓ open down ↓ 51 lines elided ↑ open up ↑
  52   52  {
  53   53          struct return_states_callback *rs_cb = __alloc_return_states_callback(0);
  54   54  
  55   55          rs_cb->callback = callback;
  56   56          add_ptr_list(&callback_list, rs_cb);
  57   57  }
  58   58  
  59   59  static void call_hooks(void)
  60   60  {
  61   61          struct return_states_callback *rs_cb;
       62 +        struct stree *orig;
  62   63  
  63      -        __set_fake_cur_stree_fast(all_return_states);
       64 +        orig = __swap_cur_stree(all_return_states);
  64   65          FOR_EACH_PTR(callback_list, rs_cb) {
  65   66                  rs_cb->callback();
  66   67          } END_FOR_EACH_PTR(rs_cb);
  67      -        __pop_fake_cur_stree_fast();
       68 +        __swap_cur_stree(orig);
  68   69  }
  69   70  
  70   71  static void match_return(int return_id, char *return_ranges, struct expression *expr)
  71   72  {
  72   73          struct stree *stree;
  73   74  
  74   75          stree = clone_stree(__get_cur_stree());
  75   76          merge_stree_no_pools(&all_return_states, stree);
  76   77          push_stree(&return_stree_stack, stree);
  77   78  }
↓ open down ↓ 31 lines elided ↑ open up ↑
 109  110          return all_return_states;
 110  111  }
 111  112  
 112  113  struct stree_stack *get_all_return_strees(void)
 113  114  {
 114  115          return return_stree_stack;
 115  116  }
 116  117  
 117  118  static void free_resources(struct symbol *sym)
 118  119  {
 119      -        struct stree *tmp;
 120      -
 121  120          free_stree(&all_return_states);
 122      -
 123      -        FOR_EACH_PTR(return_stree_stack, tmp) {
 124      -                free_stree(&tmp);
 125      -        } END_FOR_EACH_PTR(tmp);
 126      -        free_stree_stack(&return_stree_stack);
      121 +        free_stack_and_strees(&return_stree_stack);
 127  122  }
 128  123  
 129  124  void register_returns_early(int id)
 130  125  {
 131  126          RETURN_ID = id;
 132  127  
 133  128          set_dynamic_states(RETURN_ID);
 134  129          add_split_return_callback(match_return);
 135  130  }
 136  131  
 137  132  void register_returns(int id)
 138  133  {
 139  134          add_hook(&match_end_func, END_FUNC_HOOK);
 140  135          add_hook(&match_save_states, INLINE_FN_START);
 141  136          add_hook(&match_restore_states, INLINE_FN_END);
 142  137          add_hook(&free_resources, AFTER_FUNC_HOOK);
 143  138  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX