Print this page
12724 update smatch to 0.6.1-rc1-il-5
@@ -27,12 +27,12 @@
static int my_id;
static void match_assign(struct expression *expr)
{
struct expression *left, *right;
- mtag_t left_tag;
- int offset;
+ mtag_t right_tag, left_tag;
+ int right_offset, left_offset;
sval_t sval;
if (expr->op != '=')
return;
@@ -44,17 +44,18 @@
if (!get_implied_value(right, &sval))
return;
if (sval_cmp(sval, valid_ptr_min_sval) < 0 ||
sval_cmp(sval, valid_ptr_max_sval) > 0)
return;
- if (sval.uvalue & MTAG_OFFSET_MASK)
- return;
+ right_tag = sval.uvalue & ~MTAG_OFFSET_MASK;
+ right_offset = sval.uvalue & MTAG_OFFSET_MASK;
- if (!expr_to_mtag_offset(left, &left_tag, &offset))
+ if (!expr_to_mtag_offset(left, &left_tag, &left_offset) ||
+ left_offset >= MTAG_OFFSET_MASK)
return;
- sql_insert_mtag_map(sval.uvalue, -offset, left_tag);
+ sql_insert_mtag_map(left_tag, left_offset, right_tag, right_offset);
}
void register_mtag_map(int id)
{
my_id = id;