Print this page
new smatch

@@ -165,11 +165,12 @@
                 return;
         }
         if (type->type != SYM_BASETYPE)
                 return;
         right = strip_expr(right);
-        if (!right)
+        type = get_type(right);
+        if (!right || !type || type->type == SYM_ARRAY)
                 right = unknown_value_expression(left);
         assign = assign_expression(left, '=', right);
         split_fake_expr(assign);
 }
 

@@ -402,11 +403,11 @@
         struct symbol *left_type;
 
         if (expr->op != '=')
                 return;
 
-        if (is_zero(expr->right))
+        if (expr_is_zero(expr->right))
                 return;
 
         left_type = get_type(expr->left);
         if (!left_type ||
             (left_type->type != SYM_PTR &&