Blame view

scripts/coccinelle/misc/doubleinit.cocci 1.36 KB
033456e2c   Nicolas Palix   Coccinelle: Add m...
1
2
3
4
5
  /// 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.
  ///
  // Confidence: Low
29a36d4de   Julia Lawall   scripts/coccinell...
6
7
8
  // Copyright: (C) 2010-2012 Nicolas Palix.  GPLv2.
  // Copyright: (C) 2010-2012 Julia Lawall, INRIA/LIP6.  GPLv2.
  // Copyright: (C) 2010-2012 Gilles Muller, INRIA/LiP6.  GPLv2.
033456e2c   Nicolas Palix   Coccinelle: Add m...
9
  // URL: http://coccinelle.lip6.fr/
a1087ef6a   Julia Lawall   scripts/coccinell...
10
  // Comments: requires at least Coccinelle 0.2.4, lex or parse error otherwise
033456e2c   Nicolas Palix   Coccinelle: Add m...
11
12
13
14
15
16
17
18
19
20
  // Options: -no_includes -include_headers
  
  virtual org
  virtual report
  
  @r@
  identifier I, s, fld;
  position p0,p;
  expression E;
  @@
a1087ef6a   Julia Lawall   scripts/coccinell...
21
  struct I s =@p0 { ..., .fld@p = E, ...};
033456e2c   Nicolas Palix   Coccinelle: Add m...
22
23
24
25
26
27
  
  @s@
  identifier I, s, r.fld;
  position r.p0,p;
  expression E;
  @@
a1087ef6a   Julia Lawall   scripts/coccinell...
28
  struct I s =@p0 { ..., .fld@p = E, ...};
033456e2c   Nicolas Palix   Coccinelle: Add m...
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  
  @script:python depends on org@
  p0 << r.p0;
  fld << r.fld;
  ps << s.p;
  pr << r.p;
  @@
  
  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)):
    cocci.print_main(fld,p0)
    cocci.print_secs("s",ps)
    cocci.print_secs("r",pr)
  
  @script:python depends on report@
  p0 << r.p0;
  fld << r.fld;
  ps << s.p;
  pr << r.p;
  @@
  
  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)):
29a36d4de   Julia Lawall   scripts/coccinell...
50
    msg = "%s: first occurrence line %s, second occurrence line %s" % (fld,ps[0].line,pr[0].line)
033456e2c   Nicolas Palix   Coccinelle: Add m...
51
    coccilib.report.print_report(p0[0],msg)