| Julia Lawall | 53302c1 | 2012-01-27 21:41:26 +0100 | [diff] [blame] | 1 | /// Find missing clk_puts. | 
 | 2 | /// | 
 | 3 | //# This only signals a missing clk_put when there is a clk_put later | 
 | 4 | //# in the same function. | 
 | 5 | //# False positives can be due to loops. | 
 | 6 | // | 
 | 7 | // Confidence: Moderate | 
 | 8 | // Copyright: (C) 2012 Julia Lawall, INRIA/LIP6.  GPLv2. | 
 | 9 | // Copyright: (C) 2012 Gilles Muller, INRIA/LiP6.  GPLv2. | 
 | 10 | // URL: http://coccinelle.lip6.fr/ | 
 | 11 | // Comments: | 
 | 12 | // Options: | 
 | 13 |  | 
 | 14 | virtual context | 
 | 15 | virtual org | 
 | 16 | virtual report | 
 | 17 |  | 
 | 18 | @clk@ | 
 | 19 | expression e; | 
 | 20 | statement S,S1; | 
 | 21 | int ret; | 
 | 22 | position p1,p2,p3; | 
 | 23 | @@ | 
 | 24 |  | 
 | 25 | e = clk_get@p1(...) | 
 | 26 | ... when != clk_put(e) | 
 | 27 | if (<+...e...+>) S | 
 | 28 | ... when any | 
 | 29 |     when != clk_put(e) | 
 | 30 |     when != if (...) { ... clk_put(e); ... } | 
 | 31 | ( | 
 | 32 |  if (ret == 0) S1 | 
 | 33 | | | 
 | 34 | if (...) | 
 | 35 |    { ... | 
 | 36 |      return 0; } | 
 | 37 | | | 
 | 38 | if (...) | 
 | 39 |    { ... | 
 | 40 |      return <+...e...+>; } | 
 | 41 | | | 
 | 42 | *if@p2 (...) | 
 | 43 |    { ... when != clk_put(e) | 
 | 44 |          when forall | 
 | 45 |      return@p3 ...; } | 
 | 46 | ) | 
 | 47 | ... when any | 
 | 48 | clk_put(e); | 
 | 49 |  | 
 | 50 | @script:python depends on org@ | 
 | 51 | p1 << clk.p1; | 
 | 52 | p2 << clk.p2; | 
 | 53 | p3 << clk.p3; | 
 | 54 | @@ | 
 | 55 |  | 
 | 56 | cocci.print_main("clk_get",p1) | 
 | 57 | cocci.print_secs("if",p2) | 
 | 58 | cocci.print_secs("needed clk_put",p3) | 
 | 59 |  | 
 | 60 | @script:python depends on report@ | 
 | 61 | p1 << clk.p1; | 
 | 62 | p2 << clk.p2; | 
 | 63 | p3 << clk.p3; | 
 | 64 | @@ | 
 | 65 |  | 
 | 66 | msg = "ERROR: missing clk_put; clk_get on line %s and execution via conditional on line %s" % (p1[0].line,p2[0].line) | 
 | 67 | coccilib.report.print_report(p3[0],msg) |