Print this page
11506 smatch resync

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/smatch_param_used.c
          +++ new/usr/src/tools/smatch/src/smatch_param_used.c
↓ open down ↓ 23 lines elided ↑ open up ↑
  24   24  static struct stree_stack *saved_stack;
  25   25  
  26   26  STATE(used);
  27   27  
  28   28  static void get_state_hook(int owner, const char *name, struct symbol *sym)
  29   29  {
  30   30          int arg;
  31   31  
  32   32          if (!option_info)
  33   33                  return;
  34      -        if (__in_fake_assign)
       34 +        if (__in_fake_assign || __in_fake_parameter_assign || __in_function_def)
  35   35                  return;
  36   36  
  37   37          arg = get_param_num_from_sym(sym);
  38   38          if (arg >= 0)
  39   39                  set_state_stree(&used_stree, my_id, name, sym, &used);
  40   40  }
  41   41  
  42   42  static void set_param_used(struct expression *call, struct expression *arg, char *key, char *unused)
  43   43  {
  44   44          struct symbol *sym;
  45   45          char *name;
  46   46          int arg_nr;
  47   47  
  48   48          name = get_variable_from_key(arg, key, &sym);
  49   49          if (!name || !sym)
  50   50                  goto free;
  51   51  
  52   52          arg_nr = get_param_num_from_sym(sym);
  53   53          if (arg_nr >= 0)
  54      -                set_state(my_id, name, sym, &used);
       54 +                set_state_stree(&used_stree, my_id, name, sym, &used);
  55   55  free:
  56   56          free_string(name);
  57   57  }
  58   58  
  59   59  static void process_states(void)
  60   60  {
  61   61          struct sm_state *tmp;
  62   62          int arg;
  63   63          const char *name;
  64   64  
  65   65          FOR_EACH_SM(used_stree, tmp) {
  66   66                  arg = get_param_num_from_sym(tmp->sym);
  67   67                  if (arg < 0)
  68   68                          continue;
  69   69                  name = get_param_name(tmp);
  70   70                  if (!name)
  71   71                          continue;
       72 +                if (is_recursive_member(name))
       73 +                        continue;
  72   74  
       75 +                if (is_ignored_kernel_data(name))
       76 +                        continue;
       77 +
  73   78                  sql_insert_return_implies(PARAM_USED, arg, name, "");
  74   79          } END_FOR_EACH_SM(tmp);
  75   80  
  76   81          free_stree(&used_stree);
  77   82  }
  78   83  
  79   84  static void match_function_def(struct symbol *sym)
  80   85  {
  81   86          free_stree(&used_stree);
  82   87  }
↓ open down ↓ 27 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX