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;
|