1*c85f09ccSJohn Levon 
2*c85f09ccSJohn Levon 
3*c85f09ccSJohn Levon void test(void (*fun)(void));
test(void (* fun)(void))4*c85f09ccSJohn Levon void test(void (*fun)(void))
5*c85f09ccSJohn Levon {
6*c85f09ccSJohn Levon 	typedef typeof(__builtin_trap) t;	// OK
7*c85f09ccSJohn Levon 	void (*f)(void);
8*c85f09ccSJohn Levon 	int i;
9*c85f09ccSJohn Levon 
10*c85f09ccSJohn Levon 	f =  __builtin_trap;
11*c85f09ccSJohn Levon 	f = &__builtin_trap;
12*c85f09ccSJohn Levon 	f = *__builtin_trap;			// OK for GCC
13*c85f09ccSJohn Levon 	f =  __builtin_trap + 0;
14*c85f09ccSJohn Levon 	f =  __builtin_trap + 1;
15*c85f09ccSJohn Levon 	f =  __builtin_trap - 1;
16*c85f09ccSJohn Levon 
17*c85f09ccSJohn Levon 	// (void) __builtin_trap;
18*c85f09ccSJohn Levon 	f = (void*) __builtin_trap;
19*c85f09ccSJohn Levon 	f = (unsigned long) __builtin_trap;
20*c85f09ccSJohn Levon 
21*c85f09ccSJohn Levon 	i = !__builtin_trap;
22*c85f09ccSJohn Levon 	i = (__builtin_trap > fun);
23*c85f09ccSJohn Levon 	i = (__builtin_trap == fun);
24*c85f09ccSJohn Levon 	i = (fun <  __builtin_trap);
25*c85f09ccSJohn Levon 	i = (fun == __builtin_trap);
26*c85f09ccSJohn Levon 
27*c85f09ccSJohn Levon 	__builtin_trap - fun;
28*c85f09ccSJohn Levon 	fun - __builtin_trap;
29*c85f09ccSJohn Levon }
30*c85f09ccSJohn Levon 
31*c85f09ccSJohn Levon /*
32*c85f09ccSJohn Levon  * check-name: builtin arithmetic
33*c85f09ccSJohn Levon  * check-command: sparse -Wno-decl $file
34*c85f09ccSJohn Levon  * check-known-to-fail
35*c85f09ccSJohn Levon  *
36*c85f09ccSJohn Levon  * check-error-start
37*c85f09ccSJohn Levon builtin-arith.c:10:xx: error: ...
38*c85f09ccSJohn Levon builtin-arith.c:11:xx: error: ...
39*c85f09ccSJohn Levon builtin-arith.c:13:xx: error: arithmetics on pointers to functions
40*c85f09ccSJohn Levon builtin-arith.c:14:xx: error: arithmetics on pointers to functions
41*c85f09ccSJohn Levon builtin-arith.c:15:xx: error: arithmetics on pointers to functions
42*c85f09ccSJohn Levon builtin-arith.c:18:xx: error: ...
43*c85f09ccSJohn Levon builtin-arith.c:19:xx: error: ...
44*c85f09ccSJohn Levon builtin-arith.c:21:xx: error: ...
45*c85f09ccSJohn Levon builtin-arith.c:22:xx: error: ...
46*c85f09ccSJohn Levon builtin-arith.c:23:xx: error: ...
47*c85f09ccSJohn Levon builtin-arith.c:24:xx: error: ...
48*c85f09ccSJohn Levon builtin-arith.c:25:xx: error: ...
49*c85f09ccSJohn Levon builtin-arith.c:27:24: error: subtraction of functions? Share your drugs
50*c85f09ccSJohn Levon builtin-arith.c:28:13: error: subtraction of functions? Share your drugs
51*c85f09ccSJohn Levon  * check-error-end
52*c85f09ccSJohn Levon  */
53