Print this page
11972 resync smatch

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/check_deref_check.c
          +++ new/usr/src/tools/smatch/src/check_deref_check.c
↓ open down ↓ 58 lines elided ↑ open up ↑
  59   59                  goto free;
  60   60          set_state(my_id, name, sym, &derefed);
  61   61  
  62   62  free:
  63   63          free_string(name);
  64   64  }
  65   65  
  66   66  static void match_condition(struct expression *expr)
  67   67  {
  68   68          struct sm_state *sm;
       69 +        char *name;
  69   70  
  70   71          if (__in_pre_condition)
  71   72                  return;
  72   73  
  73      -        if (get_macro_name(expr->pos))
       74 +        name = get_macro_name(expr->pos);
       75 +        if (name &&
       76 +            (strcmp(name, "likely") != 0 && strcmp(name, "unlikely") != 0))
  74   77                  return;
  75   78  
  76   79          if (!is_pointer(expr))
  77   80                  return;
  78   81  
  79   82          sm = get_sm_state_expr(my_id, expr);
  80   83          if (!sm || sm->state != &derefed)
  81   84                  return;
  82   85  
  83   86          sm_warning("variable dereferenced before check '%s' (see line %d)", sm->name, sm->line);
↓ open down ↓ 11 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX