Print this page
11506 smatch resync

@@ -27,32 +27,34 @@
 static int my_id;
 
 static void match_assign(struct expression *expr)
 {
         struct expression *left, *right;
-        mtag_t left_tag, right_tag;
+        mtag_t left_tag;
         int offset;
+        sval_t sval;
 
         if (expr->op != '=')
                 return;
 
         left = strip_expr(expr->left);
         right = strip_expr(expr->right);
 
-        if (left->type != EXPR_DEREF)
+        if (!type_is_ptr(get_type(right)))
                 return;
-
-        offset = get_member_offset_from_deref(left);
-        if (offset < 0)
+        if (!get_implied_value(right, &sval))
                 return;
-
-        if (!get_mtag(left->deref, &left_tag))
+        if (sval_cmp(sval, valid_ptr_min_sval) < 0 ||
+            sval_cmp(sval, valid_ptr_max_sval) > 0)
                 return;
-        if (!get_mtag(right, &right_tag))
+        if (sval.uvalue & MTAG_OFFSET_MASK)
                 return;
 
-        sql_insert_mtag_map(right_tag, -offset, left_tag);
+        if (!expr_to_mtag_offset(left, &left_tag, &offset))
+                return;
+
+        sql_insert_mtag_map(sval.uvalue, -offset, left_tag);
 }
 
 void register_mtag_map(int id)
 {
         my_id = id;