Print this page
11506 smatch resync

*** 94,112 **** --- 94,115 ---- sql_insert_caller_info(call, NOSPEC, param, printed_name, ""); } static void returned_struct_members(int return_id, char *return_ranges, struct expression *expr) { + struct stree *start_states = get_start_states(); struct symbol *returned_sym; struct sm_state *sm; const char *param_name; struct range_list *rl; int param; returned_sym = expr_to_sym(expr); FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) { + if (get_state_stree(start_states, my_id, sm->name, sm->sym) == sm->state) + continue; param = get_param_num_from_sym(sm->sym); if (param < 0) { if (!returned_sym || returned_sym != sm->sym) continue; param = -1;
*** 220,230 **** macro = get_macro_name(stmt->pos); if (!macro) return; if (strcmp(macro, "rmb") != 0 && strcmp(macro, "smp_rmb") != 0 && ! strcmp(macro, "barrier_nospec") != 0) return; set_state(barrier_id, "barrier", NULL, &nospec); mark_user_data_as_nospec(); } --- 223,234 ---- macro = get_macro_name(stmt->pos); if (!macro) return; if (strcmp(macro, "rmb") != 0 && strcmp(macro, "smp_rmb") != 0 && ! strcmp(macro, "barrier_nospec") != 0 && ! strcmp(macro, "preempt_disable") != 0) return; set_state(barrier_id, "barrier", NULL, &nospec); mark_user_data_as_nospec(); }
*** 232,241 **** --- 236,254 ---- static void db_returns_barrier(struct expression *expr, int param, char *key, char *value) { mark_user_data_as_nospec(); } + static void select_return_stmt_cnt(struct expression *expr, int param, char *key, char *value) + { + int cnt; + + cnt = atoi(value); + if (cnt > 400) + mark_user_data_as_nospec(); + } + void check_nospec(int id) { my_id = id; add_hook(&nospec_assign, ASSIGNMENT_HOOK);
*** 246,255 **** --- 259,269 ---- add_hook(&match_call_info, FUNCTION_CALL_HOOK); add_member_info_callback(my_id, struct_member_callback); add_split_return_callback(&returned_struct_members); select_return_states_hook(NOSPEC, &db_returns_nospec); select_return_states_hook(NOSPEC_WB, &db_returns_barrier); + select_return_states_hook(STMT_CNT, &select_return_stmt_cnt); add_hook(&match_asm, ASM_HOOK); add_hook(&match_after_nospec_asm, STMT_HOOK_AFTER); }