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;