1typedef unsigned int u32;
2typedef u32 __attribute__((bitwise)) __be32;
3
4/* Implicit casts of 0, legal */
5static __be32 foo(void)
6{
7	__be32 x = 0;
8
9	return 0;
10}
11
12/* Explicit cast of 0, legal */
13static __be32 bar(void)
14{
15	return (__be32)0;
16}
17
18/* Implicit casts of nonzero, bad */
19static __be32 baz(void)
20{
21	__be32 x = 0x2a;
22
23	return 99;
24}
25
26/* Explicit cast of nonzero, bad */
27static __be32 quux(void)
28{
29	return (__be32)1729;
30}
31
32/* Explicit case of nonzero forced, legal */
33static __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
42bitwise-cast.c:21:20: warning: incorrect type in initializer (different base types)
43bitwise-cast.c:21:20:    expected restricted __be32 [usertype] x
44bitwise-cast.c:21:20:    got int
45bitwise-cast.c:23:16: warning: incorrect type in return expression (different base types)
46bitwise-cast.c:23:16:    expected restricted __be32
47bitwise-cast.c:23:16:    got int
48bitwise-cast.c:29:17: warning: cast to restricted __be32
49 * check-error-end
50 */
51