typedef unsigned int u32; typedef u32 __attribute__((bitwise)) __be32; /* Implicit casts of 0, legal */ static __be32 foo(void) { __be32 x = 0; return 0; } /* Explicit cast of 0, legal */ static __be32 bar(void) { return (__be32)0; } /* Implicit casts of nonzero, bad */ static __be32 baz(void) { __be32 x = 0x2a; return 99; } /* Explicit cast of nonzero, bad */ static __be32 quux(void) { return (__be32)1729; } /* Explicit case of nonzero forced, legal */ static __be32 quuy(void) { return (__attribute__((force)) __be32) 1730; } /* * check-name: conversions to bitwise types * check-command: sparse -Wbitwise $file * check-error-start bitwise-cast.c:21:20: warning: incorrect type in initializer (different base types) bitwise-cast.c:21:20: expected restricted __be32 [usertype] x bitwise-cast.c:21:20: got int bitwise-cast.c:23:16: warning: incorrect type in return expression (different base types) bitwise-cast.c:23:16: expected restricted __be32 bitwise-cast.c:23:16: got int bitwise-cast.c:29:17: warning: cast to restricted __be32 * check-error-end */