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