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, y, z;
10*1f5207b7SJohn Levon 
func(void)11*1f5207b7SJohn Levon void 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)
19*1f5207b7SJohn Levon 		a = returns_nonnull();
20*1f5207b7SJohn Levon 	else
21*1f5207b7SJohn Levon 		b = returns_nonnull();
22*1f5207b7SJohn Levon 	if (y)
23*1f5207b7SJohn Levon 		a = returns_nonnull();
24*1f5207b7SJohn Levon 	else
25*1f5207b7SJohn Levon 		c = returns_nonnull();
26*1f5207b7SJohn Levon 	__smatch_extra_values();
27*1f5207b7SJohn Levon 	if (x || y) {
28*1f5207b7SJohn Levon 		a->a = 1;
29*1f5207b7SJohn Levon 		b->a = 2;
30*1f5207b7SJohn Levon 	}else {
31*1f5207b7SJohn Levon 		c->a = 3;
32*1f5207b7SJohn Levon 	}
33*1f5207b7SJohn Levon }
34*1f5207b7SJohn Levon /*
35*1f5207b7SJohn Levon  * check-name: Smatch implied #6
36*1f5207b7SJohn Levon  * check-command: smatch --spammy sm_implied6.c
37*1f5207b7SJohn Levon  *
38*1f5207b7SJohn Levon  * check-output-start
39*1f5207b7SJohn Levon sm_implied6.c:29 func() error: potential NULL dereference 'b'.
40*1f5207b7SJohn Levon  * check-output-end
41*1f5207b7SJohn Levon  */
42