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