1*53ee8cc1Swenshuai.xi/// Find duplicate field initializations. This has a high rate of false 2*53ee8cc1Swenshuai.xi/// positives due to #ifdefs, which Coccinelle is not aware of in a structure 3*53ee8cc1Swenshuai.xi/// initialization. 4*53ee8cc1Swenshuai.xi/// 5*53ee8cc1Swenshuai.xi// Confidence: Low 6*53ee8cc1Swenshuai.xi// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2. 7*53ee8cc1Swenshuai.xi// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2. 8*53ee8cc1Swenshuai.xi// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2. 9*53ee8cc1Swenshuai.xi// URL: http://coccinelle.lip6.fr/ 10*53ee8cc1Swenshuai.xi// Comments: requires at least Coccinelle 0.2.4, lex or parse error otherwise 11*53ee8cc1Swenshuai.xi// Options: -no_includes -include_headers 12*53ee8cc1Swenshuai.xi 13*53ee8cc1Swenshuai.xivirtual org 14*53ee8cc1Swenshuai.xivirtual report 15*53ee8cc1Swenshuai.xi 16*53ee8cc1Swenshuai.xi@r@ 17*53ee8cc1Swenshuai.xiidentifier I, s, fld; 18*53ee8cc1Swenshuai.xiposition p0,p; 19*53ee8cc1Swenshuai.xiexpression E; 20*53ee8cc1Swenshuai.xi@@ 21*53ee8cc1Swenshuai.xi 22*53ee8cc1Swenshuai.xistruct I s =@p0 { ..., .fld@p = E, ...}; 23*53ee8cc1Swenshuai.xi 24*53ee8cc1Swenshuai.xi@s@ 25*53ee8cc1Swenshuai.xiidentifier I, s, r.fld; 26*53ee8cc1Swenshuai.xiposition r.p0,p; 27*53ee8cc1Swenshuai.xiexpression E; 28*53ee8cc1Swenshuai.xi@@ 29*53ee8cc1Swenshuai.xi 30*53ee8cc1Swenshuai.xistruct I s =@p0 { ..., .fld@p = E, ...}; 31*53ee8cc1Swenshuai.xi 32*53ee8cc1Swenshuai.xi@script:python depends on org@ 33*53ee8cc1Swenshuai.xip0 << r.p0; 34*53ee8cc1Swenshuai.xifld << r.fld; 35*53ee8cc1Swenshuai.xips << s.p; 36*53ee8cc1Swenshuai.xipr << r.p; 37*53ee8cc1Swenshuai.xi@@ 38*53ee8cc1Swenshuai.xi 39*53ee8cc1Swenshuai.xiif int(ps[0].line) < int(pr[0].line) or (int(ps[0].line) == int(pr[0].line) and int(ps[0].column) < int(pr[0].column)): 40*53ee8cc1Swenshuai.xi cocci.print_main(fld,p0) 41*53ee8cc1Swenshuai.xi cocci.print_secs("s",ps) 42*53ee8cc1Swenshuai.xi cocci.print_secs("r",pr) 43*53ee8cc1Swenshuai.xi 44*53ee8cc1Swenshuai.xi@script:python depends on report@ 45*53ee8cc1Swenshuai.xip0 << r.p0; 46*53ee8cc1Swenshuai.xifld << r.fld; 47*53ee8cc1Swenshuai.xips << s.p; 48*53ee8cc1Swenshuai.xipr << r.p; 49*53ee8cc1Swenshuai.xi@@ 50*53ee8cc1Swenshuai.xi 51*53ee8cc1Swenshuai.xiif int(ps[0].line) < int(pr[0].line) or (int(ps[0].line) == int(pr[0].line) and int(ps[0].column) < int(pr[0].column)): 52*53ee8cc1Swenshuai.xi msg = "%s: first occurrence %s, second occurrence %s" % (fld,ps[0].line,pr[0].line) 53*53ee8cc1Swenshuai.xi coccilib.report.print_report(p0[0],msg) 54