1 #define __bitwise	__attribute__((bitwise))
2 #define __force		__attribute__((force))
3 
4 typedef unsigned int u32;
5 typedef unsigned int __bitwise __be32;
6 
tobi(u32 * x)7 static __be32* tobi(u32 *x)
8 {
9 	return x;			// should warn, implicit cast
10 }
11 
tobe(u32 * x)12 static __be32* tobe(u32 *x)
13 {
14 	return (__be32 *) x;		// should warn, explicit cast
15 }
16 
tobf(u32 * x)17 static __be32* tobf(u32 *x)
18 {
19 	return (__force __be32 *) x;	// should not warn, forced cast
20 	return (__be32 __force *) x;	// should not warn, forced cast
21 }
22 
23 /*
24  * check-name: cast of bitwise pointers
25  * check-command: sparse -Wbitwise -Wbitwise-pointer $file
26  *
27  * check-error-start
28 bitwise-cast-ptr.c:9:16: warning: incorrect type in return expression (different base types)
29 bitwise-cast-ptr.c:9:16:    expected restricted __be32 [usertype] *
30 bitwise-cast-ptr.c:9:16:    got unsigned int [usertype] *x
31 bitwise-cast-ptr.c:14:17: warning: cast to restricted __be32 [usertype] *
32  * check-error-end
33  */
34