Print this page
11506 smatch resync

*** 26,37 **** --- 26,41 ---- int check_assigned_expr_id; static int my_id; static int link_id; + static struct expression *skip_mod; + static void undef(struct sm_state *sm, struct expression *mod_expr) { + if (mod_expr == skip_mod) + return; set_state(my_id, sm->name, sm->sym, &undefined); } struct expression *get_assigned_expr(struct expression *expr) {
*** 53,62 **** --- 57,67 ---- return (struct expression *)state->data; } static void match_assignment(struct expression *expr) { + static struct expression *ignored_expr; struct symbol *left_sym, *right_sym; char *left_name = NULL; char *right_name = NULL; if (expr->op != '=')
*** 70,79 **** --- 75,90 ---- return; if (is_whole_rl(rl)) return; } + if (expr->left == ignored_expr) + return; + ignored_expr = NULL; + if (__in_fake_parameter_assign) + ignored_expr = expr->left; + left_name = expr_to_var_sym(expr->left, &left_sym); if (!left_name || !left_sym) goto free; set_state(my_id, left_name, left_sym, alloc_state_expr(strip_expr(expr->right)));
*** 116,140 **** --- 127,154 ---- return; name = get_variable_from_key(arg, key, &sym); if (!name || !sym) goto free; + skip_mod = expr; set_state(my_id, name, sym, alloc_state_expr(right)); free: free_string(name); } void register_assigned_expr(int id) { my_id = check_assigned_expr_id = id; + set_dynamic_states(check_assigned_expr_id); add_hook(&match_assignment, ASSIGNMENT_HOOK_AFTER); add_modification_hook(my_id, &undef); select_return_states_hook(PARAM_SET, &record_param_assignment); } void register_assigned_expr_links(int id) { link_id = id; + set_dynamic_states(link_id); db_ignore_states(link_id); set_up_link_functions(my_id, link_id); }