1 struct foo { 2 int a; 3 }; 4 5 struct foo *a; 6 struct foo *b; 7 struct foo *c; 8 struct foo *d; 9 int x; 10 11 void func (void) 12 { 13 a = 0; 14 b = 0; 15 c = 0; 16 d = 0; 17 18 if (x == 1) 19 a = some_func(); 20 else if (x == 2) 21 b = some_func(); 22 else if (x == 3) 23 c = some_func(); 24 else 25 d = some_func(); 26 27 switch(x) { 28 case 1: 29 a->a = 1; 30 case 2: 31 a->a = 2; 32 b->a = 3; 33 break; 34 case 3: 35 c->a = 4; 36 break; 37 case 4: 38 d->a = 5; 39 break; 40 } 41 } 42 /* 43 * check-name: Smatch switch handling #2 44 * check-command: smatch --spammy sm_switch2.c 45 * 46 * check-output-start 47 sm_switch2.c:31 func() warn: missing break? reassigning 'a->a' 48 sm_switch2.c:31 func() error: potential NULL dereference 'a'. 49 sm_switch2.c:32 func() error: potential NULL dereference 'b'. 50 * check-output-end 51 */ 52