Print this page
11972 resync smatch

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/smatch_param_limit.c
          +++ new/usr/src/tools/smatch/src/smatch_param_limit.c
↓ open down ↓ 58 lines elided ↑ open up ↑
  59   59  
  60   60  static void free_start_states(void)
  61   61  {
  62   62          free_stree(&start_states);
  63   63  }
  64   64  
  65   65  static struct smatch_state *unmatched_state(struct sm_state *sm)
  66   66  {
  67   67          struct smatch_state *state;
  68   68  
  69      -        state = get_state(SMATCH_EXTRA, sm->name, sm->sym);
       69 +        state = __get_state(SMATCH_EXTRA, sm->name, sm->sym);
  70   70          if (state)
  71   71                  return state;
  72   72          return alloc_estate_whole(estate_type(sm->state));
  73   73  }
  74   74  
  75   75  struct smatch_state *get_orig_estate(const char *name, struct symbol *sym)
  76   76  {
  77   77          struct smatch_state *state;
  78   78  
  79   79          state = get_state(my_id, name, sym);
↓ open down ↓ 29 lines elided ↑ open up ↑
 109  109                  return estate_rl(state);
 110  110  
 111  111          /*
 112  112           * The problem is that we get too specific on our param limits when we
 113  113           * know exactly what pointers are passed to a function.  It gets to the
 114  114           * point where we say "pointer x will succeed, but everything else will
 115  115           * fail."  And then we introduce a new caller which passes a different
 116  116           * pointer and it's like, "Sorry bro, that's not possible."
 117  117           *
 118  118           */
 119      -        rl = rl_intersection(estate_rl(state), valid_ptr_rl);
 120      -        if (!rl)
 121      -                return estate_rl(state);
 122      -
      119 +        rl = estate_rl(state);
 123  120          FOR_EACH_PTR(rl, drange) {
 124  121                  if (drange->min.value != drange->max.value)
 125  122                          continue;
 126      -                if (drange->min.value > -4096 && drange->min.value <= 0)
      123 +                if (drange->min.value == 0)
 127  124                          continue;
      125 +                if (is_err_ptr(drange->min))
      126 +                        continue;
 128  127                  return rl_union(valid_ptr_rl, rl);
 129  128          } END_FOR_EACH_PTR(drange);
 130  129  
 131  130          return estate_rl(state);
 132  131  }
 133  132  
 134  133  static void print_return_value_param(int return_id, char *return_ranges, struct expression *expr)
 135  134  {
 136  135          struct smatch_state *state, *old;
 137  136          struct sm_state *tmp;
↓ open down ↓ 75 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX