Commit 033456e2c507a9b804de56dd258af55f03764334

Authored by Nicolas Palix
Committed by Michal Marek
1 parent be8fe9d451

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)