Print this page
12724 update smatch to 0.6.1-rc1-il-5

*** 34,44 **** #include "smatch_slist.h" #include "smatch_extra.h" static int my_id; static int link_id; - extern int check_assigned_expr_id; static void match_link_modify(struct sm_state *sm, struct expression *mod_expr); struct string_list *__ignored_macros = NULL; int in_warn_on_macro(void) --- 34,43 ----
*** 170,184 **** --- 169,188 ---- } static bool in_param_set; void set_extra_mod_helper(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state) { + struct expression *faked; + if (!expr) expr = gen_expression_from_name_sym(name, sym); remove_from_equiv(name, sym); set_union_info(name, sym, expr, state); call_extra_mod_hooks(name, sym, expr, state); + faked = get_faked_expression(); + if (!faked || + (faked->type == EXPR_ASSIGNMENT && is_fresh_alloc(faked->right))) update_mtag_data(expr, state); if (in_param_set && estate_is_unknown(state) && !get_state(SMATCH_EXTRA, name, sym)) return; set_state(SMATCH_EXTRA, name, sym, state);
*** 2798,2820 **** { struct expression *expr; struct range_list *rl = NULL; struct smatch_state *state; struct symbol *type; - char fullname[256]; char *key_orig = key; ! bool add_star = false; sval_t dummy; - if (key[0] == '*') { - add_star = true; - key++; - } - - snprintf(fullname, 256, "%s%s%s", add_star ? "*" : "", name, key + 1); - expr = symbol_expression(sym); type = get_member_type_from_key(expr, key_orig); str_to_rl(type, value, &rl); state = alloc_estate_rl(rl); if (estate_get_single_value(state, &dummy)) estate_set_hard_max(state); --- 2802,2820 ---- { struct expression *expr; struct range_list *rl = NULL; struct smatch_state *state; struct symbol *type; char *key_orig = key; ! char *fullname; sval_t dummy; expr = symbol_expression(sym); + fullname = get_variable_from_key(expr, key, NULL); + if (!fullname) + return; + type = get_member_type_from_key(expr, key_orig); str_to_rl(type, value, &rl); state = alloc_estate_rl(rl); if (estate_get_single_value(state, &dummy)) estate_set_hard_max(state);
*** 2821,2841 **** set_state(SMATCH_EXTRA, fullname, sym, state); } static void set_param_fuzzy_max(const char *name, struct symbol *sym, char *key, char *value) { struct range_list *rl = NULL; struct smatch_state *state; struct symbol *type; ! char fullname[256]; sval_t max; ! if (strcmp(key, "*$") == 0) ! snprintf(fullname, sizeof(fullname), "*%s", name); ! else if (strncmp(key, "$", 1) == 0) ! snprintf(fullname, 256, "%s%s", name, key + 1); ! else return; state = get_state(SMATCH_EXTRA, fullname, sym); if (!state) return; --- 2821,2840 ---- set_state(SMATCH_EXTRA, fullname, sym, state); } static void set_param_fuzzy_max(const char *name, struct symbol *sym, char *key, char *value) { + struct expression *expr; struct range_list *rl = NULL; struct smatch_state *state; struct symbol *type; ! char *fullname; sval_t max; ! expr = symbol_expression(sym); ! fullname = get_variable_from_key(expr, key, NULL); ! if (!fullname) return; state = get_state(SMATCH_EXTRA, fullname, sym); if (!state) return;
*** 2847,2863 **** } static void set_param_hard_max(const char *name, struct symbol *sym, char *key, char *value) { struct smatch_state *state; ! char fullname[256]; ! if (strcmp(key, "*$") == 0) ! snprintf(fullname, sizeof(fullname), "*%s", name); ! else if (strncmp(key, "$", 1) == 0) ! snprintf(fullname, 256, "%s%s", name, key + 1); ! else return; state = get_state(SMATCH_EXTRA, fullname, sym); if (!state) return; --- 2846,2861 ---- } static void set_param_hard_max(const char *name, struct symbol *sym, char *key, char *value) { struct smatch_state *state; ! struct expression *expr; ! char *fullname; ! expr = symbol_expression(sym); ! fullname = get_variable_from_key(expr, key, NULL); ! if (!fullname) return; state = get_state(SMATCH_EXTRA, fullname, sym); if (!state) return;