From 684d22382af791033338d2b06d0d44dff45274ee Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Wed, 15 Jun 2016 21:52:21 +0300 Subject: [PATCH] struct_assignment: handle pointers better Before if you had a function like: frob(&my_int); That was handled. But if you had: frob(my_int_ptr); Then it didn't set *my_int_ptr. Signed-off-by: Dan Carpenter --- smatch_struct_assignment.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/smatch_struct_assignment.c b/smatch_struct_assignment.c index 569b57f9..c734f592 100644 --- a/smatch_struct_assignment.c +++ b/smatch_struct_assignment.c @@ -107,11 +107,17 @@ static struct expression *get_right_base_expr(struct symbol *left_type, struct e static struct expression *remove_addr(struct expression *expr) { + struct symbol *type; + expr = strip_expr(expr); if (expr->type == EXPR_PREOP && expr->op == '&') return strip_expr(expr->unop); - return expr; + type = get_type(expr); + if (!type || type->type != SYM_PTR) + return expr; + + return deref_expression(expr); } static struct expression *faked_expression; -- 2.11.4.GIT