1 typedef unsigned int u32;
2 typedef u32 __attribute__((bitwise)) __be32;
3 
4 /* Implicit casts of 0, legal */
foo(void)5 static __be32 foo(void)
6 {
7 	__be32 x = 0;
8 
9 	return 0;
10 }
11 
12 /* Explicit cast of 0, legal */
bar(void)13 static __be32 bar(void)
14 {
15 	return (__be32)0;
16 }
17 
18 /* Implicit casts of nonzero, bad */
baz(void)19 static __be32 baz(void)
20 {
21 	__be32 x = 0x2a;
22 
23 	return 99;
24 }
25 
26 /* Explicit cast of nonzero, bad */
quux(void)27 static __be32 quux(void)
28 {
29 	return (__be32)1729;
30 }
31 
32 /* Explicit case of nonzero forced, legal */
quuy(void)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  */
51