From: gustavo@embeddedor.com (Gustavo A. R. Silva) Date: Thu, 27 Jul 2017 11:58:48 -0500 Subject: [Cocci] [PATCH] Coccinelle: Script to remove unnecessary static on local variables Message-ID: <20170727165848.GA15831@embeddedgus> To: cocci@systeme.lip6.fr List-Id: cocci@systeme.lip6.fr Coccinelle script to remove unnecessary static on local variables when the variables are not used before update. Signed-off-by: Gustavo A. R. Silva --- scripts/coccinelle/misc/static_unnecessary.cocci | 89 ++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 scripts/coccinelle/misc/static_unnecessary.cocci diff --git a/scripts/coccinelle/misc/static_unnecessary.cocci b/scripts/coccinelle/misc/static_unnecessary.cocci new file mode 100644 index 0000000..79fc899 --- /dev/null +++ b/scripts/coccinelle/misc/static_unnecessary.cocci @@ -0,0 +1,89 @@ +/// Drop static on local variable when the variable is not used before update. +//# NOTE: Be aware that if a large object is initialized all at once, it might +//# not be wise to remove the static because that would increase the risk of a +//# stack overflow. +/// +// Confidence: Moderate +// Copyright: (C) 2017 Julia Lawall, Inria. GPLv2. +// Copyright: (C) 2017 Gustavo A. R. Silva, Core Infrastructure Initiative. +// Copyright: (C) 2017 GPLv2. +// URL: http://coccinelle.lip6.fr/ +// Options: --no-includes --include-headers +// Keywords: static + +virtual patch +virtual context +virtual org +virtual report + +// + at bad exists@ +position p; +identifier x; +expression e; +type T; +@@ + +static T x at p; +... when != x = e +x = <+...x...+> + + at worse exists@ +position p; +identifier x; +type T; +@@ + +static T x at p; +... + &x + + at modify depends on patch && !context && !org && !report@ +identifier x; +expression e; +type T; +position p != {bad.p,worse.p}; +@@ + +-static + T x at p; + ... when != x + when strict +?x = e; +// + + +// ---------------------------------------------------------------------------- + + at modify_context depends on !patch && (context || org || report) forall@ +type T; +identifier x; +expression e; +position p != {bad.p,worse.p}; +position j0; +@@ + +* static + T x at j0@p; + ... when != x + when strict +?x = e; + +// ---------------------------------------------------------------------------- + + at script:python modify_org depends on org@ +j0 << modify_context.j0; +@@ + +msg = "Unnecessary static on local variable." +coccilib.org.print_todo(j0[0], msg) + +// ---------------------------------------------------------------------------- + +@script:python modify_report depends on report@ +j0 << modify_context.j0; +@@ + +msg = "Unnecessary static on local variable." +coccilib.report.print_report(j0[0], msg) + -- 2.5.0