Print this page
11506 smatch resync

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/smatch_array_values.c
          +++ new/usr/src/tools/smatch/src/smatch_array_values.c
↓ open down ↓ 155 lines elided ↑ open up ↑
 156  156                    get_filename(), is_static, name, DATA_VALUE, show_rl(rl));
 157  157  }
 158  158  
 159  159  static void match_assign(struct expression *expr)
 160  160  {
 161  161          struct expression *left, *array;
 162  162          struct range_list *orig_rl, *rl;
 163  163          struct symbol *type;
 164  164          char *name;
 165  165  
 166      -        type = get_type(expr->right);
      166 +        type = get_type(expr->left);
 167  167          if (!type || type->type != SYM_BASETYPE)
 168  168                  return;
 169  169  
 170  170          left = strip_expr(expr->left);
 171  171          if (!is_array(left))
 172  172                  return;
 173  173          array = get_array_base(left);
 174  174          name = get_array_name(array);
 175  175          if (!name)
 176  176                  return;
 177  177  
 178  178          if (expr->op != '=') {
 179      -                rl = alloc_whole_rl(type);
      179 +                rl = alloc_whole_rl(get_type(expr->right));
      180 +                rl = cast_rl(type, rl);
 180  181          } else {
 181  182                  get_absolute_rl(expr->right, &rl);
 182  183                  rl = cast_rl(type, rl);
 183  184                  orig_rl = get_saved_rl(type, name);
 184  185                  rl = rl_union(orig_rl, rl);
 185  186          }
 186  187  
 187  188          update_cache(name, is_file_local(array), rl);
 188  189  }
 189  190  
 190  191  void register_array_values(int id)
 191  192  {
 192  193          my_id = id;
 193  194  
 194  195          add_hook(&match_assign, ASSIGNMENT_HOOK);
 195  196          add_hook(&match_assign, GLOBAL_ASSIGNMENT_HOOK);
 196  197  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX