Print this page
new smatch

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/smatch_untracked_param.c
          +++ new/usr/src/tools/smatch/src/smatch_untracked_param.c
↓ open down ↓ 260 lines elided ↑ open up ↑
 261  261          if (param < 0)
 262  262                  return;
 263  263  
 264  264          set_state_expr(my_id, right, &untracked);
 265  265  }
 266  266  
 267  267  
 268  268  static void match_param_assign_in_asm(struct statement *stmt)
 269  269  {
 270  270  
 271      -        struct expression *expr;
      271 +        struct expression *tmp, *expr;
 272  272          struct symbol *type;
 273      -        int state = 0;
 274  273          int param;
 275  274  
 276      -        FOR_EACH_PTR(stmt->asm_inputs, expr) {
 277      -                switch (state) {
 278      -                case 0: /* identifier */
 279      -                case 1: /* constraint */
 280      -                        state++;
      275 +        FOR_EACH_PTR(stmt->asm_inputs, tmp) {
      276 +                expr = strip_expr(tmp->expr);
      277 +                type = get_type(expr);
      278 +                if (!type || type->type != SYM_PTR)
 281  279                          continue;
 282      -                case 2: /* expression */
 283      -                        state = 0;
 284      -
 285      -                        expr = strip_expr(expr);
 286      -                        type = get_type(expr);
 287      -                        if (!type || type->type != SYM_PTR)
 288      -                                continue;
 289      -                        param = get_param_num(expr);
 290      -                        if (param < 0)
 291      -                                continue;
 292      -                        set_state_expr(my_id, expr, &untracked);
      280 +                param = get_param_num(expr);
      281 +                if (param < 0)
 293  282                          continue;
 294      -                }
 295      -        } END_FOR_EACH_PTR(expr);
      283 +                set_state_expr(my_id, expr, &untracked);
      284 +        } END_FOR_EACH_PTR(tmp);
 296  285  }
 297  286  
 298  287  static void match_inline_start(struct expression *expr)
 299  288  {
 300  289          push_int(&tracked_stack, tracked);
 301  290  }
 302  291  
 303  292  static void match_inline_end(struct expression *expr)
 304  293  {
 305  294          tracked = pop_int(&tracked_stack);
↓ open down ↓ 19 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX