1/// Check for constants that are added but are used elsewhere as bitmasks
2/// The results should be checked manually to ensure that the nonzero
3/// bits in the two constants are actually disjoint.
4///
5// Confidence: Moderate
6// Copyright: (C) 2013 Julia Lawall, INRIA/LIP6.  GPLv2.
7// Copyright: (C) 2013 Gilles Muller, INRIA/LIP6.  GPLv2.
8// URL: http://coccinelle.lip6.fr/
9// Comments:
10// Options: --no-includes --include-headers
11
12virtual org
13virtual report
14virtual context
15
16@r@
17constant c;
18identifier i;
19expression e;
20@@
21
22(
23e | c@i
24|
25e & c@i
26|
27e |= c@i
28|
29e &= c@i
30)
31
32@s@
33constant r.c,c1;
34identifier i1;
35position p;
36@@
37
38(
39 c1 + c - 1
40|
41*c1@i1 +@p c
42)
43
44@script:python depends on org@
45p << s.p;
46@@
47
48cocci.print_main("sum of probable bitmasks, consider |",p)
49
50@script:python depends on report@
51p << s.p;
52@@
53
54msg = "WARNING: sum of probable bitmasks, consider |"
55coccilib.report.print_report(p[0],msg)
56