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