Print this page
12724 update smatch to 0.6.1-rc1-il-5
@@ -34,11 +34,10 @@
#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)
@@ -170,15 +169,20 @@
}
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,23 +2802,19 @@
{
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;
+ char *fullname;
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);
+ 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,21 +2821,20 @@
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[256];
+ char *fullname;
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
+ 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,17 +2846,16 @@
}
static void set_param_hard_max(const char *name, struct symbol *sym, char *key, char *value)
{
struct smatch_state *state;
- char fullname[256];
+ struct expression *expr;
+ char *fullname;
- 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
+ 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;