Print this page
11972 resync smatch

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/check_kernel.c
          +++ new/usr/src/tools/smatch/src/check_kernel.c
↓ open down ↓ 96 lines elided ↑ open up ↑
  97   97          }
  98   98          end_state = alloc_estate_rl(rl);
  99   99          set_extra_expr_nomod(arg, end_state);
 100  100  }
 101  101  
 102  102  static void match_param_err_or_null(const char *fn, struct expression *call_expr,
 103  103                          struct expression *assign_expr, void *_param)
 104  104  {
 105  105          int param = PTR_INT(_param);
 106  106          struct expression *arg;
 107      -        struct range_list *rl;
      107 +        struct range_list *pre, *rl;
 108  108          struct smatch_state *pre_state;
 109  109          struct smatch_state *end_state;
 110  110  
 111  111          arg = get_argument_from_call_expr(call_expr->args, param);
 112  112          pre_state = get_state_expr(SMATCH_EXTRA, arg);
      113 +        if (pre_state)
      114 +                pre = estate_rl(pre_state);
      115 +        else
      116 +                pre = alloc_whole_rl(&ptr_ctype);
 113  117          call_results_to_rl(call_expr, &ptr_ctype, "0,(-4095)-(-1)", &rl);
 114      -        rl = rl_intersection(estate_rl(pre_state), rl);
      118 +        rl = rl_intersection(pre, rl);
 115  119          rl = cast_rl(get_type(arg), rl);
 116  120          end_state = alloc_estate_rl(rl);
 117  121          set_extra_expr_nomod(arg, end_state);
 118  122  }
 119  123  
 120  124  static void match_not_err(const char *fn, struct expression *call_expr,
 121  125                          struct expression *assign_expr, void *unused)
 122  126  {
 123  127          struct expression *arg;
 124  128          struct smatch_state *pre_state;
↓ open down ↓ 340 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX