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