History

Coccinelle: Add misc/doubleinit.cocci

Find duplicate field initializations. This has a high rate of false positives due to #ifdefs, which Coccinelle is not aware of in a structure initialization.

Nicolas Palix committed 16 years ago

Commit 033456e1 parent be8fe9d1 file · +53 −0Browse files

Unified · Split

scripts/coccinelle/misc/doubleinit.cocci+53−0
@@ -0,0 +1,53 @@
1+/// Find duplicate field initializations. This has a high rate of false
2+/// positives due to #ifdefs, which Coccinelle is not aware of in a structure
3+/// initialization.
4+///
5+// Confidence: Low
6+// Copyright: (C) 2010 Nicolas Palix, DIKU. GPLv2.
7+// Copyright: (C) 2010 Julia Lawall, DIKU. GPLv2.
8+// Copyright: (C) 2010 Gilles Muller, INRIA/LiP6. GPLv2.
9+// URL: http://coccinelle.lip6.fr/
10+// Comments:
11+// Options: -no_includes -include_headers
12+
13+virtual org
14+virtual report
15+
16+@r@
17+identifier I, s, fld;
18+position p0,p;
19+expression E;
20+@@
21+
22+struct I s =@p0 { ... .fld@p = E, ...};
23+
24+@s@
25+identifier I, s, r.fld;
26+position r.p0,p;
27+expression E;
28+@@
29+
30+struct I s =@p0 { ... .fld@p = E, ...};
31+
32+@script:python depends on org@
33+p0 << r.p0;
34+fld << r.fld;
35+ps << s.p;
36+pr << r.p;
37+@@
38+
39+if 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+ cocci.print_main(fld,p0)
41+ cocci.print_secs("s",ps)
42+ cocci.print_secs("r",pr)
43+
44+@script:python depends on report@
45+p0 << r.p0;
46+fld << r.fld;
47+ps << s.p;
48+pr << r.p;
49+@@
50+
51+if 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+ msg = "%s: first occurrence %s, second occurrence %s" % (fld,ps[0].line,pr[0].line)
53+ coccilib.report.print_report(p0[0],msg)