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