From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751833AbdHAEiK (ORCPT ); Tue, 1 Aug 2017 00:38:10 -0400 Received: from gateway23.websitewelcome.com ([192.185.49.179]:32592 "EHLO gateway23.websitewelcome.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751029AbdHAEiI (ORCPT ); Tue, 1 Aug 2017 00:38:08 -0400 Date: Mon, 31 Jul 2017 23:38:04 -0500 From: "Gustavo A. R. Silva" To: Julia Lawall , Gilles Muller , Nicolas Palix , Michal Marek Cc: cocci@systeme.lip6.fr, linux-kernel@vger.kernel.org, Pavel Machek , Borislav Petkov , Peter Senna Tschudin , "Gustavo A. R. Silva" Subject: [PATCH v2] Coccinelle: Script to remove unnecessary static on local variables Message-ID: <20170801043804.GA4265@embeddedgus> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170727165848.GA15831@embeddedgus> User-Agent: Mutt/1.5.23 (2014-03-12) X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - gator4166.hostgator.com X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - embeddedor.com X-BWhitelist: no X-Source-IP: 189.152.159.233 X-Exim-ID: 1dcOwY-004MIu-No X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: (embeddedgus) [189.152.159.233]:38734 X-Source-Auth: gustavo@embeddedor.com X-Email-Count: 6 X-Source-Cap: Z3V6aWRpbmU7Z3V6aWRpbmU7Z2F0b3I0MTY2Lmhvc3RnYXRvci5jb20= X-Local-Domain: yes Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Coccinelle script to remove unnecessary static on local variables when the variables are not used before update. Signed-off-by: Gustavo A. R. Silva --- Changes in v2: Update header and Copyright note. scripts/coccinelle/misc/static_unnecessary.cocci | 96 ++++++++++++++++++++++++ 1 file changed, 96 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..2b10586 --- /dev/null +++ b/scripts/coccinelle/misc/static_unnecessary.cocci @@ -0,0 +1,96 @@ +/// Drop static on local variable when the variable is not used before update. +//# +//# Removing unnecessary static on local variables reduces the code +//# size and increases maintainability. +//# +//# On the other hand, even though it is rare, 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. +// URL: http://coccinelle.lip6.fr/ +// Copyright: (C) 2017 Gustavo A. R. Silva. GPLv2. +// Work supported by a grant from +// The Linux Foundation's Core Infrastructure Initiative. +// URL: https://www.coreinfrastructure.org/ +// Options: --no-includes --include-headers +// Keywords: static + +virtual patch +virtual context +virtual org +virtual report + +// +@bad exists@ +position p; +identifier x; +expression e; +type T; +@@ + +T x@p; +... when != x = e +x = <+...x...+> + +@worse exists@ +position p; +identifier x; +type T; +@@ + +T x@p; +... + &x + +@modify depends on patch && !context && !org && !report@ +identifier x; +expression e; +type T; +position p != {bad.p,worse.p}; +@@ + +-static + T x@p; + ... when != x + when strict +?x = e; +// + + +// ---------------------------------------------------------------------------- + +@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@j0@p; + ... when != x + when strict +?x = e; + +// ---------------------------------------------------------------------------- + +@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