1 struct ture {
2 	int a;
3 };
4 struct cont {
5 	struct ture *x;
6 };
7 
8 struct ture *x;
9 struct ture **px;
10 struct cont *y;
func(void)11 void func (void)
12 {
13 	int *a = &(x->a);
14 	int *b = &x->a;
15 	int *c = &(y->x->a);
16 	int *d = &((*px)->a);
17 
18 	if (x)
19 		frob();
20 	if (px)
21 		frob();
22 	if (y->x)
23 		frob();
24 	if (y)
25 		frob();
26 
27 	return;
28 }
29 /*
30  * check-name: Dereferencing before check
31  * check-command: smatch sm_deref_check_deref.c
32  *
33  * check-output-start
34 sm_deref_check_deref.c:20 func() warn: variable dereferenced before check 'px' (see line 16)
35 sm_deref_check_deref.c:24 func() warn: variable dereferenced before check 'y' (see line 15)
36  * check-output-end
37  */
38