public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC] coccinelle: add style check for assignment in if
@ 2015-08-12 13:51 Kris Borer
  2015-08-12 14:00 ` Julia Lawall
  2015-08-12 14:12 ` Michal Marek
  0 siblings, 2 replies; 5+ messages in thread
From: Kris Borer @ 2015-08-12 13:51 UTC (permalink / raw)
  To: Julia.Lawall
  Cc: Gilles.Muller, nicolas.palix, mmarek, linux-kernel, cocci,
	Kris Borer

Add a semantic patch for fixing some cases of checkpatch.pl error:

ERROR: do not use assignment in if condition

Signed-off-by: Kris Borer <kborer@gmail.com>
---
 scripts/coccinelle/style/assignment_in_if.cocci | 82 +++++++++++++++++++++++++
 1 file changed, 82 insertions(+)
 create mode 100644 scripts/coccinelle/style/assignment_in_if.cocci

diff --git a/scripts/coccinelle/style/assignment_in_if.cocci b/scripts/coccinelle/style/assignment_in_if.cocci
new file mode 100644
index 0000000..d9895e7
--- /dev/null
+++ b/scripts/coccinelle/style/assignment_in_if.cocci
@@ -0,0 +1,82 @@
+// find checkpatch.pl errors of the type:
+//	ERROR: do not use assignment in if condition
+//
+// Confidence: Moderate
+
+
+// if ( ret = call() )
+@if1@
+identifier i;
+expression E;
+statement S1, S2;
+@@
+
++ i = E;
+  if (
+- (i = E)
++ i
+  ) S1 else S2
+
+
+// if ( (ret = call()) < 0 )
+@if2@
+identifier i;
+expression E;
+statement S1, S2;
+binary operator b;
+@@
+
++ i = E;
+  if (
+- (i = E)
++ i
+  b ... ) S1 else S2
+
+// if ( ptr->fun && (ret = ptr->fun()) < 0 )
+@if3@
+identifier i, i2;
+expression E1, E2;
+constant c;
+binary operator b;
+@@
+
++ if( E1->i ) {
++  	i2 = E2;
++ 	if (i2 < c) {
+- if( E1->i && ((i2 = E2) b c) ) {
+  ...
+- }
++ 	}
++ }
+
+// if ( (ret = call()) < 0 && ret != 0 )
+@if4@
+identifier i;
+expression E, E2, E3;
+statement S1, S2;
+binary operator b;
+@@
+
++ i = E;
+  if (
+- (i = E)
++ i
+  b
+  ... && E2 && E3 ) S1 else S2
+
+// if ( (ret = call()) < 0 && ret != 0 && ret != 0 )
+@if5@
+identifier i;
+expression E, E2, E3;
+statement S1, S2;
+binary operator b;
+@@
+
++ i = E;
+  if (
+- (i = E)
++ i
+  b
+  ... && E2 && E3 ) S1 else S2
+
+
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [RFC] coccinelle: add style check for assignment in if
  2015-08-12 13:51 [RFC] coccinelle: add style check for assignment in if Kris Borer
@ 2015-08-12 14:00 ` Julia Lawall
  2015-08-12 14:12 ` Michal Marek
  1 sibling, 0 replies; 5+ messages in thread
From: Julia Lawall @ 2015-08-12 14:00 UTC (permalink / raw)
  To: Kris Borer
  Cc: Julia.Lawall, Gilles.Muller, nicolas.palix, mmarek, linux-kernel,
	cocci

Thanks for the contribution.  Have you checked very carefully that it
doesn't eg pull XXX out of if (E && XXX)?  (I don't know if it does or it
doesn't, but it is a common pitfall with this issue).

thanks,
julia

On Wed, 12 Aug 2015, Kris Borer wrote:

> Add a semantic patch for fixing some cases of checkpatch.pl error:
>
> ERROR: do not use assignment in if condition
>
> Signed-off-by: Kris Borer <kborer@gmail.com>
> ---
>  scripts/coccinelle/style/assignment_in_if.cocci | 82 +++++++++++++++++++++++++
>  1 file changed, 82 insertions(+)
>  create mode 100644 scripts/coccinelle/style/assignment_in_if.cocci
>
> diff --git a/scripts/coccinelle/style/assignment_in_if.cocci b/scripts/coccinelle/style/assignment_in_if.cocci
> new file mode 100644
> index 0000000..d9895e7
> --- /dev/null
> +++ b/scripts/coccinelle/style/assignment_in_if.cocci
> @@ -0,0 +1,82 @@
> +// find checkpatch.pl errors of the type:
> +//	ERROR: do not use assignment in if condition
> +//
> +// Confidence: Moderate
> +
> +
> +// if ( ret = call() )
> +@if1@
> +identifier i;
> +expression E;
> +statement S1, S2;
> +@@
> +
> ++ i = E;
> +  if (
> +- (i = E)
> ++ i
> +  ) S1 else S2
> +
> +
> +// if ( (ret = call()) < 0 )
> +@if2@
> +identifier i;
> +expression E;
> +statement S1, S2;
> +binary operator b;
> +@@
> +
> ++ i = E;
> +  if (
> +- (i = E)
> ++ i
> +  b ... ) S1 else S2
> +
> +// if ( ptr->fun && (ret = ptr->fun()) < 0 )
> +@if3@
> +identifier i, i2;
> +expression E1, E2;
> +constant c;
> +binary operator b;
> +@@
> +
> ++ if( E1->i ) {
> ++  	i2 = E2;
> ++ 	if (i2 < c) {
> +- if( E1->i && ((i2 = E2) b c) ) {
> +  ...
> +- }
> ++ 	}
> ++ }
> +
> +// if ( (ret = call()) < 0 && ret != 0 )
> +@if4@
> +identifier i;
> +expression E, E2, E3;
> +statement S1, S2;
> +binary operator b;
> +@@
> +
> ++ i = E;
> +  if (
> +- (i = E)
> ++ i
> +  b
> +  ... && E2 && E3 ) S1 else S2
> +
> +// if ( (ret = call()) < 0 && ret != 0 && ret != 0 )
> +@if5@
> +identifier i;
> +expression E, E2, E3;
> +statement S1, S2;
> +binary operator b;
> +@@
> +
> ++ i = E;
> +  if (
> +- (i = E)
> ++ i
> +  b
> +  ... && E2 && E3 ) S1 else S2
> +
> +
> --
> 1.9.1
>
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC] coccinelle: add style check for assignment in if
  2015-08-12 13:51 [RFC] coccinelle: add style check for assignment in if Kris Borer
  2015-08-12 14:00 ` Julia Lawall
@ 2015-08-12 14:12 ` Michal Marek
       [not found]   ` <CAMy_N63pADkvb4vP=1ReMPpmR7e32TmEE91hELKXTsYnPP+GZA@mail.gmail.com>
  1 sibling, 1 reply; 5+ messages in thread
From: Michal Marek @ 2015-08-12 14:12 UTC (permalink / raw)
  To: Kris Borer
  Cc: Julia.Lawall, Gilles.Muller, nicolas.palix, linux-kernel, cocci

On 2015-08-12 15:51, Kris Borer wrote:
> Add a semantic patch for fixing some cases of checkpatch.pl error:
> 
> ERROR: do not use assignment in if condition

There is a gcc warning for this already.

Michal


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC] coccinelle: add style check for assignment in if
       [not found]   ` <CAMy_N63pADkvb4vP=1ReMPpmR7e32TmEE91hELKXTsYnPP+GZA@mail.gmail.com>
@ 2015-08-12 15:05     ` Michal Marek
  2015-08-12 15:16       ` Julia Lawall
  0 siblings, 1 reply; 5+ messages in thread
From: Michal Marek @ 2015-08-12 15:05 UTC (permalink / raw)
  To: Kris Borer
  Cc: Julia Lawall, Gilles.Muller, nicolas.palix, linux-kernel, cocci

On 2015-08-12 16:53, Kris Borer wrote:
> On Wed, Aug 12, 2015 at 10:12 AM, Michal Marek <mmarek@suse.cz
> <mailto:mmarek@suse.cz>> wrote:
> 
>     On 2015-08-12 15:51, Kris Borer wrote:
>     > Add a semantic patch for fixing some cases of checkpatch.pl <http://checkpatch.pl> error:
>     >
>     > ERROR: do not use assignment in if condition
> 
>     There is a gcc warning for this already.
> 
>     Michal
> 
> 
> ​My intention was not to create another way to uncover problems but
> rather to ​provide a tool for people to use to fix them. Let me know if
> I am misunderstanding the purpose of this subsystem.

OK, so this is fixing a style issue, and not cases of accidental
assignment instead of '==' (for which there is a gcc warning and we
hopefully do not have such errors in the kernel). While I'm probably
ignorant and no not see how one style is better than the other, I see
that some maintainers already applied your patches based on this check.
So I'll merge it once Julia acks it.

P.S.: Please switch of HTML email, otherwise vger.kernel.org won't
accept your messages.

Michal

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC] coccinelle: add style check for assignment in if
  2015-08-12 15:05     ` Michal Marek
@ 2015-08-12 15:16       ` Julia Lawall
  0 siblings, 0 replies; 5+ messages in thread
From: Julia Lawall @ 2015-08-12 15:16 UTC (permalink / raw)
  To: Michal Marek
  Cc: Kris Borer, Gilles Muller, nicolas.palix, linux-kernel, cocci

[-- Attachment #1: Type: TEXT/PLAIN, Size: 1360 bytes --]



On Wed, 12 Aug 2015, Michal Marek wrote:

> On 2015-08-12 16:53, Kris Borer wrote:
> > On Wed, Aug 12, 2015 at 10:12 AM, Michal Marek <mmarek@suse.cz
> > <mailto:mmarek@suse.cz>> wrote:
> >
> >     On 2015-08-12 15:51, Kris Borer wrote:
> >     > Add a semantic patch for fixing some cases of checkpatch.pl <http://checkpatch.pl> error:
> >     >
> >     > ERROR: do not use assignment in if condition
> >
> >     There is a gcc warning for this already.
> >
> >     Michal
> >
> >
> > ​My intention was not to create another way to uncover problems but
> > rather to ​provide a tool for people to use to fix them. Let me know if
> > I am misunderstanding the purpose of this subsystem.
>
> OK, so this is fixing a style issue, and not cases of accidental
> assignment instead of '==' (for which there is a gcc warning and we
> hopefully do not have such errors in the kernel). While I'm probably
> ignorant and no not see how one style is better than the other, I see
> that some maintainers already applied your patches based on this check.
> So I'll merge it once Julia acks it.

Actually, assignments inside if tests are really annoying for Coccinelle,
because there become two different control flows from the assignment to
the test on the result.  So I would be happy to see these go away.

I'll check the semantic patch as soon as possible.

julia

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-08-12 15:16 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-12 13:51 [RFC] coccinelle: add style check for assignment in if Kris Borer
2015-08-12 14:00 ` Julia Lawall
2015-08-12 14:12 ` Michal Marek
     [not found]   ` <CAMy_N63pADkvb4vP=1ReMPpmR7e32TmEE91hELKXTsYnPP+GZA@mail.gmail.com>
2015-08-12 15:05     ` Michal Marek
2015-08-12 15:16       ` Julia Lawall

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox