1*c85f09ccSJohn Levon extern int fun(void);
2*c85f09ccSJohn Levon extern int arr[];
3*c85f09ccSJohn Levon extern int var;
4*c85f09ccSJohn Levon 
test_address(int arg,int ptr[])5*c85f09ccSJohn Levon int test_address(int arg, int ptr[])
6*c85f09ccSJohn Levon {
7*c85f09ccSJohn Levon 
8*c85f09ccSJohn Levon 	if (fun())	return -1;
9*c85f09ccSJohn Levon 	if (var)	return -1;
10*c85f09ccSJohn Levon 	if (arg)	return -1;
11*c85f09ccSJohn Levon 	if (ptr)	return -1;
12*c85f09ccSJohn Levon 
13*c85f09ccSJohn Levon lab:
14*c85f09ccSJohn Levon 	if (arr)	return 1;
15*c85f09ccSJohn Levon 	if (&arr)	return 1;
16*c85f09ccSJohn Levon 	if (fun)	return 1;
17*c85f09ccSJohn Levon 	if (&fun)	return 1;
18*c85f09ccSJohn Levon 	if (*fun)	return 1;
19*c85f09ccSJohn Levon 	if (&var)	return 1;
20*c85f09ccSJohn Levon 	if (&arg)	return 1;
21*c85f09ccSJohn Levon 	if (&&lab)	return 1;
22*c85f09ccSJohn Levon 
23*c85f09ccSJohn Levon 	return -1;
24*c85f09ccSJohn Levon }
25*c85f09ccSJohn Levon 
test_address_not(int arg,int ptr[])26*c85f09ccSJohn Levon int test_address_not(int arg, int ptr[])
27*c85f09ccSJohn Levon {
28*c85f09ccSJohn Levon 
29*c85f09ccSJohn Levon 	if (!fun())	return -1;
30*c85f09ccSJohn Levon 	if (!var)	return -1;
31*c85f09ccSJohn Levon 	if (!arg)	return -1;
32*c85f09ccSJohn Levon 	if (!ptr)	return -1;
33*c85f09ccSJohn Levon 
34*c85f09ccSJohn Levon lab:
35*c85f09ccSJohn Levon 	if (!arr)	return 0;
36*c85f09ccSJohn Levon 	if (!&arr)	return 0;
37*c85f09ccSJohn Levon 	if (!fun)	return 0;
38*c85f09ccSJohn Levon 	if (!&fun)	return 0;
39*c85f09ccSJohn Levon 	if (!*fun)	return 0;
40*c85f09ccSJohn Levon 	if (!&var)	return 0;
41*c85f09ccSJohn Levon 	if (!&arg)	return 0;
42*c85f09ccSJohn Levon 	if (!&&lab)	return 0;
43*c85f09ccSJohn Levon 
44*c85f09ccSJohn Levon 	return -1;
45*c85f09ccSJohn Levon }
46*c85f09ccSJohn Levon 
test_address_cmp(int arg,int ptr[])47*c85f09ccSJohn Levon int test_address_cmp(int arg, int ptr[])
48*c85f09ccSJohn Levon {
49*c85f09ccSJohn Levon 	if (fun() == 0)	return -1;
50*c85f09ccSJohn Levon 	if (0 == fun())	return -1;
51*c85f09ccSJohn Levon 	if (var == 0)	return -1;
52*c85f09ccSJohn Levon 	if (0 == var)	return -1;
53*c85f09ccSJohn Levon 	if (arg == 0)	return -1;
54*c85f09ccSJohn Levon 	if (0 == arg)	return -1;
55*c85f09ccSJohn Levon 	if (ptr == 0)	return -1;
56*c85f09ccSJohn Levon 	if (0 == ptr)	return -1;
57*c85f09ccSJohn Levon 
58*c85f09ccSJohn Levon lab:
59*c85f09ccSJohn Levon 	if (arr == 0)	return 0;
60*c85f09ccSJohn Levon 	if (0 == arr)	return 0;
61*c85f09ccSJohn Levon 	if (&arr == 0)	return 0;
62*c85f09ccSJohn Levon 	if (0 == &arr)	return 0;
63*c85f09ccSJohn Levon 	if (fun == 0)	return 0;
64*c85f09ccSJohn Levon 	if (0 == fun)	return 0;
65*c85f09ccSJohn Levon 	if (&fun == 0)	return 0;
66*c85f09ccSJohn Levon 	if (0 == &fun)	return 0;
67*c85f09ccSJohn Levon 	if (*fun == 0)	return 0;
68*c85f09ccSJohn Levon 	if (0 == *fun)	return 0;
69*c85f09ccSJohn Levon 	if (&var == 0)	return 0;
70*c85f09ccSJohn Levon 	if (0 == &var)	return 0;
71*c85f09ccSJohn Levon 	if (&arg == 0)	return 0;
72*c85f09ccSJohn Levon 	if (0 == &arg)	return 0;
73*c85f09ccSJohn Levon 	if (&&lab == 0)	return 0;
74*c85f09ccSJohn Levon 	if (0 == &&lab)	return 0;
75*c85f09ccSJohn Levon 
76*c85f09ccSJohn Levon 	return -1;
77*c85f09ccSJohn Levon }
78*c85f09ccSJohn Levon 
79*c85f09ccSJohn Levon /*
80*c85f09ccSJohn Levon  * check-name: Waddress
81*c85f09ccSJohn Levon  * check-command: sparse -Wno-decl -Wno-non-pointer-null -Waddress $file
82*c85f09ccSJohn Levon  * check-known-to-fail
83*c85f09ccSJohn Levon  *
84*c85f09ccSJohn Levon  * check-error-start
85*c85f09ccSJohn Levon Waddress.c:14:13: warning: the address of an array will always evaluate as true
86*c85f09ccSJohn Levon Waddress.c:15:14: warning: the address of an array will always evaluate as true
87*c85f09ccSJohn Levon Waddress.c:16:13: warning: the address of a function will always evaluate as true
88*c85f09ccSJohn Levon Waddress.c:17:14: warning: the address of a function will always evaluate as true
89*c85f09ccSJohn Levon Waddress.c:18:13: warning: the address of a variable will always evaluate as true
90*c85f09ccSJohn Levon Waddress.c:19:13: warning: the address of a variable will always evaluate as true
91*c85f09ccSJohn Levon Waddress.c:20:13: warning: the address of a label will always evaluate as true
92*c85f09ccSJohn Levon Waddress.c:34:13: warning: the address of an array will always evaluate as true
93*c85f09ccSJohn Levon Waddress.c:35:13: warning: the address of an array will always evaluate as true
94*c85f09ccSJohn Levon Waddress.c:36:13: warning: the address of a function will always evaluate as true
95*c85f09ccSJohn Levon Waddress.c:37:13: warning: the address of a function will always evaluate as true
96*c85f09ccSJohn Levon Waddress.c:38:13: warning: the address of a variable will always evaluate as true
97*c85f09ccSJohn Levon Waddress.c:39:13: warning: the address of a variable will always evaluate as true
98*c85f09ccSJohn Levon Waddress.c:40:13: warning: the address of a label will always evaluate as true
99*c85f09ccSJohn Levon Waddress.c:57:13: warning: the address of an array will always evaluate as true
100*c85f09ccSJohn Levon Waddress.c:58:13: warning: the address of an array will always evaluate as true
101*c85f09ccSJohn Levon Waddress.c:59:13: warning: the address of an array will always evaluate as true
102*c85f09ccSJohn Levon Waddress.c:60:13: warning: the address of an array will always evaluate as true
103*c85f09ccSJohn Levon Waddress.c:61:13: warning: the address of a function will always evaluate as true
104*c85f09ccSJohn Levon Waddress.c:62:13: warning: the address of a function will always evaluate as true
105*c85f09ccSJohn Levon Waddress.c:63:13: warning: the address of a function will always evaluate as true
106*c85f09ccSJohn Levon Waddress.c:64:13: warning: the address of a function will always evaluate as true
107*c85f09ccSJohn Levon Waddress.c:65:13: warning: the address of a variable will always evaluate as true
108*c85f09ccSJohn Levon Waddress.c:66:13: warning: the address of a variable will always evaluate as true
109*c85f09ccSJohn Levon Waddress.c:67:13: warning: the address of a variable will always evaluate as true
110*c85f09ccSJohn Levon Waddress.c:68:13: warning: the address of a variable will always evaluate as true
111*c85f09ccSJohn Levon Waddress.c:69:13: warning: the address of a label will always evaluate as true
112*c85f09ccSJohn Levon Waddress.c:70:13: warning: the address of a label will always evaluate as true
113*c85f09ccSJohn Levon  * check-error-end
114*c85f09ccSJohn Levon  */
115