Print this page
11972 resync smatch


 118         check_dereference(get_array_base(expr));
 119 }
 120 
 121 static void set_param_dereferenced(struct expression *call, struct expression *arg, char *key, char *unused)
 122 {
 123         struct symbol *sym;
 124         char *name;
 125 
 126         name = get_variable_from_key(arg, key, &sym);
 127         if (!name || !sym)
 128                 goto free;
 129 
 130         check_dereference_name_sym(name, sym);
 131 free:
 132         free_string(name);
 133 }
 134 
 135 static void match_condition(struct expression *expr)
 136 {
 137         struct smatch_state *true_state = NULL;

 138 
 139         if (get_macro_name(expr->pos))


 140                 return;
 141 
 142         if (!is_pointer(expr))
 143                 return;
 144 
 145         if (expr->type == EXPR_ASSIGNMENT) {
 146                 match_condition(expr->right);
 147                 match_condition(expr->left);
 148         }
 149 
 150         if (implied_not_equal(expr, 0))
 151                 return;
 152 
 153         if (get_state_expr(my_id, expr))
 154                 true_state = &ok;
 155 
 156         set_true_false_states_expr(my_id, expr, true_state, &null);
 157 }
 158 
 159 void check_check_deref(int id)


 118         check_dereference(get_array_base(expr));
 119 }
 120 
 121 static void set_param_dereferenced(struct expression *call, struct expression *arg, char *key, char *unused)
 122 {
 123         struct symbol *sym;
 124         char *name;
 125 
 126         name = get_variable_from_key(arg, key, &sym);
 127         if (!name || !sym)
 128                 goto free;
 129 
 130         check_dereference_name_sym(name, sym);
 131 free:
 132         free_string(name);
 133 }
 134 
 135 static void match_condition(struct expression *expr)
 136 {
 137         struct smatch_state *true_state = NULL;
 138         char *name;
 139 
 140         name = get_macro_name(expr->pos);
 141         if (name &&
 142             (strcmp(name, "likely") != 0 && strcmp(name, "unlikely") != 0))
 143                 return;
 144 
 145         if (!is_pointer(expr))
 146                 return;
 147 
 148         if (expr->type == EXPR_ASSIGNMENT) {
 149                 match_condition(expr->right);
 150                 match_condition(expr->left);
 151         }
 152 
 153         if (implied_not_equal(expr, 0))
 154                 return;
 155 
 156         if (get_state_expr(my_id, expr))
 157                 true_state = &ok;
 158 
 159         set_true_false_states_expr(my_id, expr, true_state, &null);
 160 }
 161 
 162 void check_check_deref(int id)