2 * smatch/check_db_info.c
4 * Copyright (C) 2010 Dan Carpenter.
6 * Licensed under the Open Software License version 1.1
11 #include "smatch_extra.h"
15 static struct range_list
*return_ranges
;
17 static void add_return_range(struct range_list
*rl
)
23 return_ranges
= range_list_union(return_ranges
, rl
);
26 static void match_return(struct expression
*ret_value
)
28 struct smatch_state
*state
;
29 struct range_list
*rl
;
32 ret_value
= strip_expr(ret_value
);
36 if (ret_value
->type
== EXPR_CALL
) {
37 rl
= db_return_vals(ret_value
);
39 sm_msg("info: return_value %s", show_ranges(rl
));
42 sm_msg("info: return_value unknown");
43 add_return_range(whole_range_list());
48 if (get_value(ret_value
, &val
)) {
49 sm_msg("info: return_value %lld", val
);
50 add_return_range(alloc_range_list(val
, val
));
53 state
= get_state_expr(SMATCH_EXTRA
, ret_value
);
55 sm_msg("info: return_value unknown");
56 add_return_range(whole_range_list());
60 sm_msg("info: return_value %s", state
->name
);
61 add_return_range(whole_range_list());
64 static void match_end_func(struct symbol
*sym
)
68 sm_msg("info: function_return_values '%s'", show_ranges(return_ranges
));
72 void check_db_info(int id
)
77 add_hook(&match_return
, RETURN_HOOK
);
78 add_hook(&match_end_func
, END_FUNC_HOOK
);