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