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