From 72e65eff34c0aaaddfc3a620073f4be3883f5c95 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Mon, 28 Jan 2019 13:37:09 +0300 Subject: [PATCH] assigned_expr: make it work for parameter assignments Say the DB records that "$0->bar" is set to "0-64max[$1]", then we have code to store an assignment "foo->bar = baz;". Unfortunately, the code doesn't work because the modification_hook immediately sets "foo->bar" to undefined. Signed-off-by: Dan Carpenter --- smatch_assigned_expr.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/smatch_assigned_expr.c b/smatch_assigned_expr.c index b0c2c4f7..5a5a1229 100644 --- a/smatch_assigned_expr.c +++ b/smatch_assigned_expr.c @@ -28,8 +28,12 @@ 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); } @@ -118,6 +122,7 @@ static void record_param_assignment(struct expression *expr, int param, char *ke if (!name || !sym) goto free; + skip_mod = expr; set_state(my_id, name, sym, alloc_state_expr(right)); free: free_string(name); -- 2.11.4.GIT