20
21 static int my_id;
22
23 static int err_ptr = 0;
24 static int returns_null = 0;
25
26 static void match_err_ptr(struct expression *expr)
27 {
28 expr = strip_expr(expr);
29 if (!expr)
30 return;
31 if (expr->type != EXPR_CALL)
32 return;
33
34 if (expr->fn->type != EXPR_SYMBOL || !expr->fn->symbol)
35 return;
36 if (!strcmp(expr->fn->symbol->ident->name, "ERR_PTR"))
37 err_ptr = 1;
38 }
39
40 extern int check_assigned_expr_id;
41 static void match_return(struct expression *ret_value)
42 {
43 struct state_list *slist;
44 struct sm_state *tmp;
45 sval_t sval;
46
47 if (__inline_fn)
48 return;
49 match_err_ptr(ret_value);
50 slist = get_possible_states_expr(check_assigned_expr_id, ret_value);
51 FOR_EACH_PTR(slist, tmp) {
52 if (tmp->state == &undefined || tmp->state == &merged)
53 continue;
54 match_err_ptr((struct expression *)tmp->state->data);
55 } END_FOR_EACH_PTR(tmp);
56
57 if (get_implied_value(ret_value, &sval)) {
58 if (sval.value == 0)
59 returns_null = 1;
60 }
|
20
21 static int my_id;
22
23 static int err_ptr = 0;
24 static int returns_null = 0;
25
26 static void match_err_ptr(struct expression *expr)
27 {
28 expr = strip_expr(expr);
29 if (!expr)
30 return;
31 if (expr->type != EXPR_CALL)
32 return;
33
34 if (expr->fn->type != EXPR_SYMBOL || !expr->fn->symbol)
35 return;
36 if (!strcmp(expr->fn->symbol->ident->name, "ERR_PTR"))
37 err_ptr = 1;
38 }
39
40 static void match_return(struct expression *ret_value)
41 {
42 struct state_list *slist;
43 struct sm_state *tmp;
44 sval_t sval;
45
46 if (__inline_fn)
47 return;
48 match_err_ptr(ret_value);
49 slist = get_possible_states_expr(check_assigned_expr_id, ret_value);
50 FOR_EACH_PTR(slist, tmp) {
51 if (tmp->state == &undefined || tmp->state == &merged)
52 continue;
53 match_err_ptr((struct expression *)tmp->state->data);
54 } END_FOR_EACH_PTR(tmp);
55
56 if (get_implied_value(ret_value, &sval)) {
57 if (sval.value == 0)
58 returns_null = 1;
59 }
|