| /// |
| /// 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) |