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)7static __be32* tobi(u32 *x) 8 { 9 return x; // should warn, implicit cast 10 } 11 tobe(u32 * x)12static __be32* tobe(u32 *x) 13 { 14 return (__be32 *) x; // should warn, explicit cast 15 } 16 tobf(u32 * x)17static __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