From 03cdc963e2fd11d10399b3907a90b26d59350f58 Mon Sep 17 00:00:00 2001 From: Julia Lawall Date: Fri, 27 Jan 2012 21:41:26 +0100 Subject: [PATCH] --- yaml --- r: 298213 b: refs/heads/master c: 53302c1dfa8a911b88e68634ed56fcf577037fac h: refs/heads/master i: 298211: 70bbc641e92da28db58273857764725f9f0eee7f v: v3 --- [refs] | 2 +- trunk/scripts/coccinelle/free/clk_put.cocci | 67 +++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 trunk/scripts/coccinelle/free/clk_put.cocci diff --git a/[refs] b/[refs] index 28b744c6a57b..fd133e28aa6e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: dddcbb7ce3a9947710137d06d0157a2355be93dc +refs/heads/master: 53302c1dfa8a911b88e68634ed56fcf577037fac diff --git a/trunk/scripts/coccinelle/free/clk_put.cocci b/trunk/scripts/coccinelle/free/clk_put.cocci new file mode 100644 index 000000000000..46747adfd20a --- /dev/null +++ b/trunk/scripts/coccinelle/free/clk_put.cocci @@ -0,0 +1,67 @@ +/// Find missing clk_puts. +/// +//# This only signals a missing clk_put when there is a clk_put later +//# in the same function. +//# False positives can be due to loops. +// +// Confidence: Moderate +// Copyright: (C) 2012 Julia Lawall, INRIA/LIP6. GPLv2. +// Copyright: (C) 2012 Gilles Muller, INRIA/LiP6. GPLv2. +// URL: http://coccinelle.lip6.fr/ +// Comments: +// Options: + +virtual context +virtual org +virtual report + +@clk@ +expression e; +statement S,S1; +int ret; +position p1,p2,p3; +@@ + +e = clk_get@p1(...) +... when != clk_put(e) +if (<+...e...+>) S +... when any + when != clk_put(e) + when != if (...) { ... clk_put(e); ... } +( + if (ret == 0) S1 +| +if (...) + { ... + return 0; } +| +if (...) + { ... + return <+...e...+>; } +| +*if@p2 (...) + { ... when != clk_put(e) + when forall + return@p3 ...; } +) +... when any +clk_put(e); + +@script:python depends on org@ +p1 << clk.p1; +p2 << clk.p2; +p3 << clk.p3; +@@ + +cocci.print_main("clk_get",p1) +cocci.print_secs("if",p2) +cocci.print_secs("needed clk_put",p3) + +@script:python depends on report@ +p1 << clk.p1; +p2 << clk.p2; +p3 << clk.p3; +@@ + +msg = "ERROR: missing clk_put; clk_get on line %s and execution via conditional on line %s" % (p1[0].line,p2[0].line) +coccilib.report.print_report(p3[0],msg)