From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754142AbbHORbH (ORCPT ); Sat, 15 Aug 2015 13:31:07 -0400 Received: from mail2-relais-roc.national.inria.fr ([192.134.164.83]:47001 "EHLO mail2-relais-roc.national.inria.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752109AbbHORbG (ORCPT ); Sat, 15 Aug 2015 13:31:06 -0400 X-IronPort-AV: E=Sophos;i="5.15,685,1432591200"; d="scan'208";a="173703144" Date: Sat, 15 Aug 2015 19:30:45 +0200 (CEST) From: Julia Lawall X-X-Sender: jll@localhost6.localdomain6 To: Kris Borer cc: Gilles Muller , nicolas.palix@imag.fr, mmarek@suse.cz, linux-kernel@vger.kernel.org, cocci@systeme.lip6.fr Subject: Re: [PATCH] coccinelle: add style check for assignment in if In-Reply-To: <1439659132-4452-1-git-send-email-kborer@gmail.com> Message-ID: References: <1439659132-4452-1-git-send-email-kborer@gmail.com> User-Agent: Alpine 2.02 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, 15 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 > > Reviewed-by: Julia Lawall Sorry, but I'm not done reviewing it. I have a lot of changes to propose. Is this different than the RFC v2? julia > Signed-off-by: Kris Borer > --- > scripts/coccinelle/style/assignment_in_if.cocci | 92 +++++++++++++++++++++++++ > 1 file changed, 92 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..22ab161 > --- /dev/null > +++ b/scripts/coccinelle/style/assignment_in_if.cocci > @@ -0,0 +1,92 @@ > +// find checkpatch.pl errors of the type: > +// ERROR: do not use assignment in if condition > +// > +// This script is designed to correct code where assignments exist in if > +// conditions. It is only capable of handling a subset of such problems. > +// > +// For example: > +// > +// if(result = myfun()) > +// > +// would become: > +// > +// result = myfun(); > +// if(result) > +// > +// 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 b c) { > +- if( E1->i && ((i2 = E2) b c) ) { > + ... > +- } > ++ } > ++ } > + > +// if ( (ret = call()) < 0 && ret != -1 ) > +@if4@ > +identifier i; > +expression E, E2; > +statement S1, S2; > +binary operator b; > +@@ > + > ++ i = E; > + if ( > +- (i = E) > ++ i > + b > + ... && E2 ) S1 else S2 > + > +// if ( (ret = call()) < 0 && ret != -1 && ret != -2 ) > +@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 > >