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,c1; 18identifier i,i1; 19position p; 20@@ 21 22( 23 c1 + c - 1 24| 25 c1@i1 +@p c@i 26) 27 28@s@ 29constant r.c, r.c1; 30identifier i; 31expression e; 32@@ 33 34( 35e | c@i 36| 37e & c@i 38| 39e |= c@i 40| 41e &= c@i 42| 43e | c1@i 44| 45e & c1@i 46| 47e |= c1@i 48| 49e &= c1@i 50) 51 52@depends on s@ 53position r.p; 54constant c1,c2; 55@@ 56 57* c1 +@p c2 58 59@script:python depends on s && org@ 60p << r.p; 61@@ 62 63cocci.print_main("sum of probable bitmasks, consider |",p) 64 65@script:python depends on s && report@ 66p << r.p; 67@@ 68 69msg = "WARNING: sum of probable bitmasks, consider |" 70coccilib.report.print_report(p[0],msg) 71