[alsa-devel] [PATCH 0/13] make return of 0 explicit
Sometimes a local variable is used as a return value in a case where the return value is always 0. The result is more apparent if this variable is just replaced by 0. This is done by the following semantic patch, although some cleanups may be needed. (http://coccinelle.lip6.fr/)
// <smpl> @r exists@ local idexpression ret; identifier reti; expression e; position p; @@
ret@reti = 0; ... when != (ret = e|ret &= e|ret |= e|ret += e|ret -= e|ret *= e|ret ^= e) when != (++ret|--ret|ret++|ret--) when != &ret return ret;@p
@bad1 exists@ expression e != 0; local idexpression r.ret; position r.p; @@
(ret = e|ret &= e|ret |= e|ret += e|ret -= e|ret *= e|ret ^= e|++ret|--ret|ret++|ret--|&ret) ... return ret;@p
@bad2 exists@ identifier r.reti; position r.p; identifier f; type T; @@
f(...,T reti,...) { ... return reti;@p }
@change depends on !bad1 && !bad2@ position r.p; local idexpression r.ret; identifier f; @@
f(...) { <+... return -ret +0 ;@p ...+> }
@rewrite@ local idexpression r.ret; expression e; position p; identifier change.f; @@
f(...) { <+... (ret@p = e|&ret@p) ...+> }
@depends on change@ local idexpression r.ret; position p != rewrite.p; identifier change.f; @@
f(...) { <+... ( break; | ret = 0; ... when exists ret@p ... when any | - ret = 0; ) ...+> }
@depends on change@ identifier r.reti; type T; constant C; identifier change.f; @@
f(...) { ... when any -T reti = C; ... when != reti when strict }
@depends on change@ identifier r.reti; type T; identifier change.f; @@
f(...) { ... when any -T reti; ... when != reti when strict } // </smpl>
The first four rules detect cases where only 0 reaches a return. The remaining rules clean up any variable initializations or declarations that are made unnecessary by this change.
From: Julia Lawall Julia.Lawall@lip6.fr
Delete unnecessary local variable whose value is always 0 and that hides the fact that the result is always 0.
A simplified version of the semantic patch that fixes this problem is as follows: (http://coccinelle.lip6.fr/)
// <smpl> @r exists@ local idexpression ret; expression e; position p; @@
-ret = 0; ... when != ret = e return - ret + 0 ; // </smpl>
Signed-off-by: Julia Lawall Julia.Lawall@lip6.fr
--- sound/oss/mpu401.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/sound/oss/mpu401.c b/sound/oss/mpu401.c index 25e4609..3bbc3ec 100644 --- a/sound/oss/mpu401.c +++ b/sound/oss/mpu401.c @@ -567,7 +567,6 @@ static int mpu401_out(int dev, unsigned char midi_byte) static int mpu401_command(int dev, mpu_command_rec * cmd) { int i, timeout, ok; - int ret = 0; unsigned long flags; struct mpu_config *devc;
@@ -644,7 +643,6 @@ retry: } } } - ret = 0; cmd->data[0] = 0;
if (cmd->nr_returns) @@ -666,7 +664,7 @@ retry: } } spin_unlock_irqrestore(&devc->lock,flags); - return ret; + return 0; }
static int mpu_cmd(int dev, int cmd, int data)
At Mon, 19 May 2014 06:31:10 +0200, Julia Lawall wrote:
From: Julia Lawall Julia.Lawall@lip6.fr
Delete unnecessary local variable whose value is always 0 and that hides the fact that the result is always 0.
A simplified version of the semantic patch that fixes this problem is as follows: (http://coccinelle.lip6.fr/)
// <smpl> @r exists@ local idexpression ret; expression e; position p; @@
-ret = 0; ... when != ret = e return
- ret
- 0 ;
// </smpl>
Signed-off-by: Julia Lawall Julia.Lawall@lip6.fr
Thanks, applied.
Takashi
sound/oss/mpu401.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/sound/oss/mpu401.c b/sound/oss/mpu401.c index 25e4609..3bbc3ec 100644 --- a/sound/oss/mpu401.c +++ b/sound/oss/mpu401.c @@ -567,7 +567,6 @@ static int mpu401_out(int dev, unsigned char midi_byte) static int mpu401_command(int dev, mpu_command_rec * cmd) { int i, timeout, ok;
- int ret = 0; unsigned long flags; struct mpu_config *devc;
@@ -644,7 +643,6 @@ retry: } } }
ret = 0; cmd->data[0] = 0;
if (cmd->nr_returns)
@@ -666,7 +664,7 @@ retry: } } spin_unlock_irqrestore(&devc->lock,flags);
- return ret;
- return 0;
}
static int mpu_cmd(int dev, int cmd, int data)
participants (2)
-
Julia Lawall
-
Takashi Iwai