Print this page
new smatch

*** 42,51 **** --- 42,52 ---- static char *cur_func; static unsigned int loop_count; static int last_goto_statement_handled; int __expr_stmt_count; int __in_function_def; + int __in_unmatched_hook; static struct expression_list *switch_expr_stack = NULL; static struct expression_list *post_op_stack = NULL; static struct ptr_list *backup;
*** 458,467 **** --- 459,470 ---- else __pass_to_client(expr, ASSIGNMENT_HOOK); __fake_struct_member_assignments(expr); + /* Re-examine ->right for inlines. See the commit message */ + right = strip_expr(expr->right); if (expr->op == '=' && right->type == EXPR_CALL) __pass_to_client(expr, CALL_ASSIGNMENT_HOOK); if (get_macro_name(right->pos) && get_macro_name(expr->pos) != get_macro_name(right->pos))
*** 525,536 **** if (sym_name_is("__builtin_constant_p", expr->fn)) break; if (handle__builtin_choose_expr(expr)) break; - split_expr_list(expr->args, expr); __split_expr(expr->fn); if (is_inline_func(expr->fn)) add_inline_function(expr->fn->symbol); if (inlinable(expr->fn)) __inline_call = 1; __process_post_op_stack(); --- 528,539 ---- if (sym_name_is("__builtin_constant_p", expr->fn)) break; if (handle__builtin_choose_expr(expr)) break; __split_expr(expr->fn); + split_expr_list(expr->args, expr); if (is_inline_func(expr->fn)) add_inline_function(expr->fn->symbol); if (inlinable(expr->fn)) __inline_call = 1; __process_post_op_stack();
*** 567,576 **** --- 570,580 ---- __pass_to_client(expr, STRING_HOOK); break; default: break; }; + __pass_to_client(expr, EXPR_HOOK_AFTER); pop_expression(&big_expression_stack); } static int is_forever_loop(struct statement *stmt) {
*** 698,708 **** __push_continues(); __push_breaks(); __merge_gotos(loop_name, NULL); __split_stmt(stmt->iterator_statement); __merge_continues(); ! if (!is_zero(stmt->iterator_post_condition)) __save_gotos(loop_name, NULL); if (is_forever_loop(stmt)) { __use_breaks(); } else { --- 702,712 ---- __push_continues(); __push_breaks(); __merge_gotos(loop_name, NULL); __split_stmt(stmt->iterator_statement); __merge_continues(); ! if (!expr_is_zero(stmt->iterator_post_condition)) __save_gotos(loop_name, NULL); if (is_forever_loop(stmt)) { __use_breaks(); } else {
*** 1612,1636 **** __bail_on_rest_of_function = 0; } static void save_flow_state(void) { ! __add_ptr_list(&backup, INT_PTR(loop_num << 2), 0); ! __add_ptr_list(&backup, INT_PTR(loop_count << 2), 0); ! __add_ptr_list(&backup, INT_PTR(final_pass << 2), 0); ! __add_ptr_list(&backup, big_statement_stack, 0); ! __add_ptr_list(&backup, big_expression_stack, 0); ! __add_ptr_list(&backup, big_condition_stack, 0); ! __add_ptr_list(&backup, switch_expr_stack, 0); ! __add_ptr_list(&backup, cur_func_sym, 0); ! __add_ptr_list(&backup, __prev_stmt, 0); ! __add_ptr_list(&backup, __cur_stmt, 0); ! __add_ptr_list(&backup, __next_stmt, 0); ! } static void *pop_backup(void) { void *ret; --- 1616,1639 ---- __bail_on_rest_of_function = 0; } static void save_flow_state(void) { ! __add_ptr_list(&backup, INT_PTR(loop_num << 2)); ! __add_ptr_list(&backup, INT_PTR(loop_count << 2)); ! __add_ptr_list(&backup, INT_PTR(final_pass << 2)); ! __add_ptr_list(&backup, big_statement_stack); ! __add_ptr_list(&backup, big_expression_stack); ! __add_ptr_list(&backup, big_condition_stack); ! __add_ptr_list(&backup, switch_expr_stack); ! __add_ptr_list(&backup, cur_func_sym); ! __add_ptr_list(&backup, __prev_stmt); ! __add_ptr_list(&backup, __cur_stmt); ! __add_ptr_list(&backup, __next_stmt); } static void *pop_backup(void) { void *ret;