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

@@ -149,10 +149,13 @@
 static void handle_non_struct_assignments(struct expression *left, struct expression *right)
 {
         struct symbol *type;
         struct expression *assign;
 
+        while (right && right->type == EXPR_ASSIGNMENT)
+                right = strip_parens(right->left);
+
         type = get_type(left);
         if (!type)
                 return;
         if (type->type == SYM_PTR) {
                 left = deref_expression(left);

@@ -232,18 +235,20 @@
         struct expression *left_member;
         struct expression *right_member;
         struct expression *assign;
         int op = '.';
 
-
         if (__in_fake_assign)
                 return;
         faked_expression = faked;
 
         left = strip_expr(left);
         right = strip_expr(right);
 
+        if (left->type == EXPR_PREOP && left->op == '*' && is_pointer(left))
+                left = preop_expression(left, '(');
+
         struct_type = get_struct_type(left);
         if (!struct_type) {
                 /*
                  * This is not a struct assignment obviously.  But this is where
                  * memcpy() is handled so it feels like a good place to add this