Print this page
new smatch

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/smatch_struct_assignment.c
          +++ new/usr/src/tools/smatch/src/smatch_struct_assignment.c
↓ open down ↓ 159 lines elided ↑ open up ↑
 160  160                          right = deref_expression(right);
 161  161                  else
 162  162                          right = unknown_value_expression(left);
 163  163                  assign = assign_expression(left, '=', right);
 164  164                  split_fake_expr(assign);
 165  165                  return;
 166  166          }
 167  167          if (type->type != SYM_BASETYPE)
 168  168                  return;
 169  169          right = strip_expr(right);
 170      -        if (!right)
      170 +        type = get_type(right);
      171 +        if (!right || !type || type->type == SYM_ARRAY)
 171  172                  right = unknown_value_expression(left);
 172  173          assign = assign_expression(left, '=', right);
 173  174          split_fake_expr(assign);
 174  175  }
 175  176  
 176  177  static void set_inner_struct_members(int mode, struct expression *faked, struct expression *left, struct expression *right, struct symbol *member)
 177  178  {
 178  179          struct expression *left_member;
 179  180          struct expression *right_member = NULL;  /* silence GCC */
 180  181          struct expression *assign;
↓ open down ↓ 216 lines elided ↑ open up ↑
 397  398          copy_containter_states(expr->left, arg, -offset);
 398  399  }
 399  400  
 400  401  void __fake_struct_member_assignments(struct expression *expr)
 401  402  {
 402  403          struct symbol *left_type;
 403  404  
 404  405          if (expr->op != '=')
 405  406                  return;
 406  407  
 407      -        if (is_zero(expr->right))
      408 +        if (expr_is_zero(expr->right))
 408  409                  return;
 409  410  
 410  411          left_type = get_type(expr->left);
 411  412          if (!left_type ||
 412  413              (left_type->type != SYM_PTR &&
 413  414               left_type->type != SYM_STRUCT))
 414  415                  return;
 415  416  
 416  417          if (handle_param_offsets(expr))
 417  418                  return;
↓ open down ↓ 161 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX