Print this page
12166 resync smatch to 0.6.1-rc1-il-3

Split Close
Expand all
Collapse all
          --- old/usr/src/tools/smatch/src/smatch_states.c
          +++ new/usr/src/tools/smatch/src/smatch_states.c
↓ open down ↓ 1087 lines elided ↑ open up ↑
1088 1088  {
1089 1089          return !!top_rl(remaining_cases);
1090 1090  }
1091 1091  
1092 1092  void __merge_switches(struct expression *switch_expr, struct range_list *case_rl)
1093 1093  {
1094 1094          struct stree *stree;
1095 1095          struct stree *implied_stree;
1096 1096  
1097 1097          stree = pop_stree(&switch_stack);
     1098 +        if (!stree) {
     1099 +                /*
     1100 +                 * If the cur_stree was NULL before the start of the switch
     1101 +                 * statement then we don't want to unnullify it.
     1102 +                 *
     1103 +                 */
     1104 +                push_stree(&switch_stack, stree);
     1105 +                return;
     1106 +        }
1098 1107          implied_stree = __implied_case_stree(switch_expr, case_rl, &remaining_cases, &stree);
1099 1108          merge_stree(&cur_stree, implied_stree);
1100 1109          free_stree(&implied_stree);
1101 1110          push_stree(&switch_stack, stree);
1102 1111  }
1103 1112  
1104 1113  void __discard_switches(void)
1105 1114  {
1106 1115          struct stree *stree;
1107 1116  
↓ open down ↓ 63 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX