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

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/smatch_mtag_map.c
          +++ new/usr/src/tools/smatch/src/smatch_mtag_map.c
↓ open down ↓ 21 lines elided ↑ open up ↑
  22   22  
  23   23  #include "smatch.h"
  24   24  #include "smatch_slist.h"
  25   25  #include "smatch_extra.h"
  26   26  
  27   27  static int my_id;
  28   28  
  29   29  static void match_assign(struct expression *expr)
  30   30  {
  31   31          struct expression *left, *right;
  32      -        mtag_t left_tag;
  33      -        int offset;
       32 +        mtag_t right_tag, left_tag;
       33 +        int right_offset, left_offset;
  34   34          sval_t sval;
  35   35  
  36   36          if (expr->op != '=')
  37   37                  return;
  38   38  
  39   39          left = strip_expr(expr->left);
  40   40          right = strip_expr(expr->right);
  41   41  
  42   42          if (!type_is_ptr(get_type(right)))
  43   43                  return;
  44   44          if (!get_implied_value(right, &sval))
  45   45                  return;
  46   46          if (sval_cmp(sval, valid_ptr_min_sval) < 0 ||
  47   47              sval_cmp(sval, valid_ptr_max_sval) > 0)
  48   48                  return;
  49      -        if (sval.uvalue & MTAG_OFFSET_MASK)
  50      -                return;
       49 +        right_tag = sval.uvalue & ~MTAG_OFFSET_MASK;
       50 +        right_offset = sval.uvalue & MTAG_OFFSET_MASK;
  51   51  
  52      -        if (!expr_to_mtag_offset(left, &left_tag, &offset))
       52 +        if (!expr_to_mtag_offset(left, &left_tag, &left_offset) ||
       53 +            left_offset >= MTAG_OFFSET_MASK)
  53   54                  return;
  54   55  
  55      -        sql_insert_mtag_map(sval.uvalue, -offset, left_tag);
       56 +        sql_insert_mtag_map(left_tag, left_offset, right_tag, right_offset);
  56   57  }
  57   58  
  58   59  void register_mtag_map(int id)
  59   60  {
  60   61          my_id = id;
  61   62  
  62   63          add_hook(&match_assign, ASSIGNMENT_HOOK);
  63   64          add_hook(&match_assign, GLOBAL_ASSIGNMENT_HOOK);
  64   65  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX