1 typedef unsigned int u32;
   2 typedef u32 __attribute__((bitwise)) __be32;
   3 
   4 /* Implicit casts of 0, legal */
   5 static __be32 foo(void)
   6 {
   7         __be32 x = 0;
   8 
   9         return 0;
  10 }
  11 
  12 /* Explicit cast of 0, legal */
  13 static __be32 bar(void)
  14 {
  15         return (__be32)0;
  16 }
  17 
  18 /* Implicit casts of nonzero, bad */
  19 static __be32 baz(void)
  20 {
  21         __be32 x = 0x2a;
  22 
  23         return 99;
  24 }
  25 
  26 /* Explicit cast of nonzero, bad */
  27 static __be32 quux(void)
  28 {
  29         return (__be32)1729;
  30 }
  31 
  32 /* Explicit case of nonzero forced, legal */
  33 static __be32 quuy(void)
  34 {
  35         return (__attribute__((force)) __be32) 1730;
  36 }
  37 
  38 /*
  39  * check-name: conversions to bitwise types
  40  * check-command: sparse -Wbitwise $file
  41  * check-error-start
  42 bitwise-cast.c:21:20: warning: incorrect type in initializer (different base types)
  43 bitwise-cast.c:21:20:    expected restricted __be32 [usertype] x
  44 bitwise-cast.c:21:20:    got int
  45 bitwise-cast.c:23:16: warning: incorrect type in return expression (different base types)
  46 bitwise-cast.c:23:16:    expected restricted __be32
  47 bitwise-cast.c:23:16:    got int
  48 bitwise-cast.c:29:17: warning: cast to restricted __be32
  49  * check-error-end
  50  */