Print this page
new smatch


  41         int array_size;
  42         struct expression *offset;
  43         struct range_list *rl;
  44 
  45         expr = strip_expr(expr);
  46         if (!is_array(expr))
  47                 return;
  48 
  49         array_expr = get_array_base(expr);
  50         array_size = get_array_size(array_expr);
  51         if (!array_size || array_size == 1)
  52                 return;
  53 
  54         offset = get_array_offset(expr);
  55         get_absolute_rl(offset, &rl);
  56         if (rl_max(rl).uvalue < array_size)
  57                 return;
  58         if (buf_comparison_index_ok(expr))
  59                 return;
  60 
  61         if (getting_address())
  62                 return;
  63         if (is_capped(offset))
  64                 return;
  65         set_state_expr(my_used_id, offset, alloc_state_num(array_size));
  66 }
  67 
  68 static void match_condition(struct expression *expr)
  69 {
  70         int left;
  71         sval_t sval;
  72         struct state_list *slist;
  73         struct sm_state *tmp;
  74         int boundary;
  75 
  76         if (!expr || expr->type != EXPR_COMPARE)
  77                 return;
  78         if (get_macro_name(expr->pos))
  79                 return;
  80         if (get_implied_value(expr->left, &sval))
  81                 left = 1;




  41         int array_size;
  42         struct expression *offset;
  43         struct range_list *rl;
  44 
  45         expr = strip_expr(expr);
  46         if (!is_array(expr))
  47                 return;
  48 
  49         array_expr = get_array_base(expr);
  50         array_size = get_array_size(array_expr);
  51         if (!array_size || array_size == 1)
  52                 return;
  53 
  54         offset = get_array_offset(expr);
  55         get_absolute_rl(offset, &rl);
  56         if (rl_max(rl).uvalue < array_size)
  57                 return;
  58         if (buf_comparison_index_ok(expr))
  59                 return;
  60 
  61         if (getting_address(expr))
  62                 return;
  63         if (is_capped(offset))
  64                 return;
  65         set_state_expr(my_used_id, offset, alloc_state_num(array_size));
  66 }
  67 
  68 static void match_condition(struct expression *expr)
  69 {
  70         int left;
  71         sval_t sval;
  72         struct state_list *slist;
  73         struct sm_state *tmp;
  74         int boundary;
  75 
  76         if (!expr || expr->type != EXPR_COMPARE)
  77                 return;
  78         if (get_macro_name(expr->pos))
  79                 return;
  80         if (get_implied_value(expr->left, &sval))
  81                 left = 1;