coccinelle: Add script to remove unnecessary return variable

This script helps to remove bogus intermediate local variable
used in functions to store return value and instead return
directly while saving few bits of memory.

Signed-off-by: Himanshu Jha <himanshujha199640@gmail.com>
This commit is contained in:
Himanshu Jha 2018-11-25 16:57:39 +05:30 committed by Anas Nashif
parent 58245cd02f
commit 40b5442699

View file

@ -0,0 +1,67 @@
///
/// Remove unneeded variable used to store return value.
///
// Confidence: Moderate
// Copyright: (C) 2012 Peter Senna Tschudin, INRIA/LIP6. GPLv2.
// URL: http://coccinelle.lip6.fr/
// Comments: Comments on code can be deleted if near code that is removed.
// "when strict" can be removed to get more hits, but adds false
// positives
virtual patch
virtual report
virtual context
virtual org
@depends on patch && !(file in "ext")@
type T;
constant C;
identifier ret;
@@
- T ret = C;
... when != ret
when strict
return
- ret
+ C
;
@depends on context && !(file in "ext")@
type T;
constant C;
identifier ret;
@@
* T ret = C;
... when != ret
when strict
* return ret;
@r1 depends on (report || org) && !(file in "ext")@
type T;
constant C;
identifier ret;
position p1, p2;
@@
T ret@p1 = C;
... when != ret
when strict
return ret@p2;
@script:python depends on report@
p1 << r1.p1;
p2 << r1.p2;
C << r1.C;
ret << r1.ret;
@@
coccilib.report.print_report(p1[0], "Unneeded variable: \"" + ret +
"\". Return \"" + C + "\" on line "
+ p2[0].line)
@script:python depends on org@
p1 << r1.p1;
p2 << r1.p2;
C << r1.C;
ret << r1.ret;
@@
cocci.print_main("unneeded \"" + ret + "\" variable", p1)
cocci.print_sec("return " + C + " here", p2)