xref: /openbmc/linux/scripts/coccinelle/tests/doublebitand.cocci (revision 97c1cf8fdbce332bfacc3e38aae3fe2af1369906)
1*97c1cf8fSJulia Lawall/// Find bit operations that include the same argument more than once
2*97c1cf8fSJulia Lawall//# One source of false positives is when the argument performs a side
3*97c1cf8fSJulia Lawall//# effect.  Another source of false positives is when a neutral value
4*97c1cf8fSJulia Lawall//# such as 0 for | is used to indicate no information, to maintain the
5*97c1cf8fSJulia Lawall//# same structure as other similar expressions
6*97c1cf8fSJulia Lawall///
7*97c1cf8fSJulia Lawall// Confidence: Moderate
8*97c1cf8fSJulia Lawall// Copyright: (C) 2010 Nicolas Palix, DIKU.  GPLv2.
9*97c1cf8fSJulia Lawall// Copyright: (C) 2010 Julia Lawall, DIKU.  GPLv2.
10*97c1cf8fSJulia Lawall// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6.  GPLv2.
11*97c1cf8fSJulia Lawall// URL: http://coccinelle.lip6.fr/
12*97c1cf8fSJulia Lawall// Comments:
13*97c1cf8fSJulia Lawall// Options: -no_includes -include_headers
14*97c1cf8fSJulia Lawall
15*97c1cf8fSJulia Lawallvirtual context
16*97c1cf8fSJulia Lawallvirtual org
17*97c1cf8fSJulia Lawallvirtual report
18*97c1cf8fSJulia Lawall
19*97c1cf8fSJulia Lawall@r expression@
20*97c1cf8fSJulia Lawallexpression E;
21*97c1cf8fSJulia Lawallposition p;
22*97c1cf8fSJulia Lawall@@
23*97c1cf8fSJulia Lawall
24*97c1cf8fSJulia Lawall(
25*97c1cf8fSJulia Lawall*        E@p
26*97c1cf8fSJulia Lawall         & ... & E
27*97c1cf8fSJulia Lawall|
28*97c1cf8fSJulia Lawall*        E@p
29*97c1cf8fSJulia Lawall         | ... | E
30*97c1cf8fSJulia Lawall|
31*97c1cf8fSJulia Lawall*        E@p
32*97c1cf8fSJulia Lawall         & ... & !E
33*97c1cf8fSJulia Lawall|
34*97c1cf8fSJulia Lawall*        E@p
35*97c1cf8fSJulia Lawall         | ... | !E
36*97c1cf8fSJulia Lawall|
37*97c1cf8fSJulia Lawall*        !E@p
38*97c1cf8fSJulia Lawall         & ... & E
39*97c1cf8fSJulia Lawall|
40*97c1cf8fSJulia Lawall*        !E@p
41*97c1cf8fSJulia Lawall         | ... | E
42*97c1cf8fSJulia Lawall)
43*97c1cf8fSJulia Lawall
44*97c1cf8fSJulia Lawall@script:python depends on org@
45*97c1cf8fSJulia Lawallp << r.p;
46*97c1cf8fSJulia Lawall@@
47*97c1cf8fSJulia Lawall
48*97c1cf8fSJulia Lawallcocci.print_main("duplicated argument to & or |",p)
49*97c1cf8fSJulia Lawall
50*97c1cf8fSJulia Lawall@script:python depends on report@
51*97c1cf8fSJulia Lawallp << r.p;
52*97c1cf8fSJulia Lawall@@
53*97c1cf8fSJulia Lawall
54*97c1cf8fSJulia Lawallcoccilib.report.print_report(p[0],"duplicated argument to & or |")
55