Commit 033456e2c507a9b804de56dd258af55f03764334
Committed by
Michal Marek
1 parent
be8fe9d451
Exists in
master
and in
7 other branches
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. Signed-off-by: Nicolas Palix <npalix@diku.dk> Signed-off-by: Julia Lawall <julia@diku.dk> Signed-off-by: Michal Marek <mmarek@suse.cz>
Showing 1 changed file with 53 additions and 0 deletions Side-by-side Diff
scripts/coccinelle/misc/doubleinit.cocci
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) |