linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Bug in checkpatch.pl
@ 2010-11-02 22:57 Audun Hoem
  2010-11-03 12:04 ` [PATCH] checkpatch.pl: fix CAST detection to not screw with parens handling Florian Mickler
  0 siblings, 1 reply; 7+ messages in thread
From: Audun Hoem @ 2010-11-02 22:57 UTC (permalink / raw)
  To: Andy Whitcroft; +Cc: linux-kernel

I have stumbled about a bug in checkpatch.pl while working on some
code in drivers/staging. It seems to get confused when confronted with
asterisks. For example, this snippe:

kmalloc(sizeof(struct alphatrack_ocmd) * true_size, GFP_KERNEL);

Here the asterisk is in it's binary form, obviously, and performs a
multiplication, however checkpatch reports this:

drivers/staging/frontier/alphatrack.c:772: ERROR: space prohibited
after that '*' (ctx:WxW)

So it's obviously thinking it's the unary operator, which should only
be preceded by a variable name or another unary operator such as ++.

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

* [PATCH] checkpatch.pl: fix CAST detection to not screw with parens handling
  2010-11-02 22:57 Bug in checkpatch.pl Audun Hoem
@ 2010-11-03 12:04 ` Florian Mickler
  2010-11-03 15:20   ` Florian Mickler
  0 siblings, 1 reply; 7+ messages in thread
From: Florian Mickler @ 2010-11-03 12:04 UTC (permalink / raw)
  To: Andy Whitcroft; +Cc: Audun Hoem, linux-kernel, Florian Mickler

Casts have to be handled after the last type that is followed by an
opening parenthesis is handled.

On Tue, 2 Nov 2010 23:57:36 +0100
Audun Hoem <audun.hoem@gmail.com> wrote:

> I have stumbled about a bug in checkpatch.pl while working on some
> code in drivers/staging. It seems to get confused when confronted with
> asterisks. For example, this snippe:
>
> kmalloc(sizeof(struct alphatrack_ocmd) * true_size, GFP_KERNEL);
>
> Here the asterisk is in it's binary form, obviously, and performs a
> multiplication, however checkpatch reports this:
>
> drivers/staging/frontier/alphatrack.c:772: ERROR: space prohibited
> after that '*' (ctx:WxW)
>
> So it's obviously thinking it's the unary operator, which should only
> be preceded by a variable name or another unary operator such as ++.

Reported-By: Audun Hoem <audun.hoem@gmail.com>

Signed-off-by: Florian Mickler <florian@mickler.org>
---
 scripts/checkpatch.pl |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 90b54d4..c1cbb09 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -859,10 +859,6 @@ sub annotate_values {
 				$av_preprocessor = 0;
 			}
 
-		} elsif ($cur =~ /^(\(\s*$Type\s*)\)/) {
-			print "CAST($1)\n" if ($dbg_values > 1);
-			push(@av_paren_type, $type);
-			$type = 'C';
 
 		} elsif ($cur =~ /^($Type)\s*(?:$Ident|,|\)|\(|\s*$)/) {
 			print "DECLARE($1)\n" if ($dbg_values > 1);
@@ -963,6 +959,13 @@ sub annotate_values {
 			$type = 'V';
 			$av_pending = 'V';
 
+		} elsif ($cur =~ /^(\(\s*$Type\s*)\)/) {
+			#casts handled after last type that opens a brace
+			#is handled, else it screws up the parens handling
+			print "CAST($1)\n" if ($dbg_values > 1);
+			push(@av_paren_type, $type);
+			$type = 'C';
+
 		} elsif ($cur =~ /^($Ident\s*):(?:\s*\d+\s*(,|=|;))?/) {
 			if (defined $2 && $type eq 'C' || $type eq 'T') {
 				$av_pend_colon = 'B';
-- 
1.7.3.1


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

* Re: [PATCH] checkpatch.pl: fix CAST detection to not screw with parens handling
  2010-11-03 12:04 ` [PATCH] checkpatch.pl: fix CAST detection to not screw with parens handling Florian Mickler
@ 2010-11-03 15:20   ` Florian Mickler
  2010-11-03 15:26     ` Audun Hoem
  2010-11-17  7:30     ` Florian Mickler
  0 siblings, 2 replies; 7+ messages in thread
From: Florian Mickler @ 2010-11-03 15:20 UTC (permalink / raw)
  To: Florian Mickler; +Cc: Andy Whitcroft, Audun Hoem, linux-kernel

On Wed,  3 Nov 2010 13:04:33 +0100
Florian Mickler <florian@mickler.org> wrote:

> Casts have to be handled after the last type that is followed by an
> opening parenthesis is handled.

That is the wrong fix. I realized now that with that patch we would
not claim anything as a CAST anymore. Better is probably to only claim
a CAST if av_pending is not set. Andy, would that work? It seems to be
alright... Do you have some tests for checkpatch?

Testing it with the reported line and some other random samples it
seems to be alright.

Regards,
Flo

>8------------------------------------------------------------------------
commit 11ed611c647420ea27124faf269d724b4fd3ade4
Author: Florian Mickler <florian@mickler.org>
Date:   Wed Nov 3 15:54:26 2010 +0100

    checkpatch.pl: fix CAST detection
    
    We should only claim that something is a cast if we did not encouter a
    token before, that did set av_pending.
    
    This fixes the operator * in the line below  to be detected as
    binary (vs unary).
    
     kmalloc(sizeof(struct alphatrack_ocmd) * true_size, GFP_KERNEL);
    
    Reported-by: Audun Hoem <audun.hoem@gmail.com>
    Signed-off-by: Florian Mickler <florian@mickler.org>

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 90b54d4..06f5c44 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -859,7 +859,7 @@ sub annotate_values {
 				$av_preprocessor = 0;
 			}
 
-		} elsif ($cur =~ /^(\(\s*$Type\s*)\)/) {
+		} elsif ($cur =~ /^(\(\s*$Type\s*)\)/ && $av_pending eq '_') {
 			print "CAST($1)\n" if ($dbg_values > 1);
 			push(@av_paren_type, $type);
 			$type = 'C';

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

* Re: [PATCH] checkpatch.pl: fix CAST detection to not screw with parens handling
  2010-11-03 15:20   ` Florian Mickler
@ 2010-11-03 15:26     ` Audun Hoem
  2010-11-03 16:07       ` Florian Mickler
  2010-11-17  7:30     ` Florian Mickler
  1 sibling, 1 reply; 7+ messages in thread
From: Audun Hoem @ 2010-11-03 15:26 UTC (permalink / raw)
  To: Florian Mickler; +Cc: Andy Whitcroft, linux-kernel

On 11/3/10, Florian Mickler <florian@mickler.org> wrote:
> On Wed,  3 Nov 2010 13:04:33 +0100
> Florian Mickler <florian@mickler.org> wrote:
>
>> Casts have to be handled after the last type that is followed by an
>> opening parenthesis is handled.
>
> That is the wrong fix. I realized now that with that patch we would
> not claim anything as a CAST anymore. Better is probably to only claim
> a CAST if av_pending is not set. Andy, would that work? It seems to be
> alright... Do you have some tests for checkpatch?
>
> Testing it with the reported line and some other random samples it
> seems to be alright.
>

Probably good enough of a test to try it on random kernel code.

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

* Re: [PATCH] checkpatch.pl: fix CAST detection to not screw with parens handling
  2010-11-03 15:26     ` Audun Hoem
@ 2010-11-03 16:07       ` Florian Mickler
  0 siblings, 0 replies; 7+ messages in thread
From: Florian Mickler @ 2010-11-03 16:07 UTC (permalink / raw)
  To: Audun Hoem; +Cc: Andy Whitcroft, linux-kernel

On Wed, 3 Nov 2010 16:26:44 +0100
Audun Hoem <audun.hoem@gmail.com> wrote:

> On 11/3/10, Florian Mickler <florian@mickler.org> wrote:
> > On Wed,  3 Nov 2010 13:04:33 +0100
> > Florian Mickler <florian@mickler.org> wrote:
> >
> >> Casts have to be handled after the last type that is followed by an
> >> opening parenthesis is handled.
> >
> > That is the wrong fix. I realized now that with that patch we would
> > not claim anything as a CAST anymore. Better is probably to only claim
> > a CAST if av_pending is not set. Andy, would that work? It seems to be
> > alright... Do you have some tests for checkpatch?
> >
> > Testing it with the reported line and some other random samples it
> > seems to be alright.
> >
> 
> Probably good enough of a test to try it on random kernel code.

Yes, on random inspection of kernel code the new output looks good. 
(I've set dbg_values to 2 and diffed the output for some files of
the patched version with the output of the broken version)

I speculated on Andy to have a special set of problematic test
cases, but I looked through the git-log of checkpatch and tested some of
the stuff there. It all seems ok. 

Regards,
Flo

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

* Re: [PATCH] checkpatch.pl: fix CAST detection to not screw with parens handling
  2010-11-03 15:20   ` Florian Mickler
  2010-11-03 15:26     ` Audun Hoem
@ 2010-11-17  7:30     ` Florian Mickler
  2010-11-23 14:15       ` Andy Whitcroft
  1 sibling, 1 reply; 7+ messages in thread
From: Florian Mickler @ 2010-11-17  7:30 UTC (permalink / raw)
  To: Andy Whitcroft; +Cc: Audun Hoem, linux-kernel


Hi Andy, 

did you get this?

Regards,
Flo

On Wed, 3 Nov 2010 16:20:42 +0100
Florian Mickler <florian@mickler.org> wrote:

> On Wed,  3 Nov 2010 13:04:33 +0100
> Florian Mickler <florian@mickler.org> wrote:
> 
> > Casts have to be handled after the last type that is followed by an
> > opening parenthesis is handled.
> 
> That is the wrong fix. I realized now that with that patch we would
> not claim anything as a CAST anymore. Better is probably to only claim
> a CAST if av_pending is not set. Andy, would that work? It seems to be
> alright... Do you have some tests for checkpatch?
> 
> Testing it with the reported line and some other random samples it
> seems to be alright.
> 
> Regards,
> Flo
> 
> >8------------------------------------------------------------------------
> commit 11ed611c647420ea27124faf269d724b4fd3ade4
> Author: Florian Mickler <florian@mickler.org>
> Date:   Wed Nov 3 15:54:26 2010 +0100
> 
>     checkpatch.pl: fix CAST detection
>     
>     We should only claim that something is a cast if we did not encouter a
>     token before, that did set av_pending.
>     
>     This fixes the operator * in the line below  to be detected as
>     binary (vs unary).
>     
>      kmalloc(sizeof(struct alphatrack_ocmd) * true_size, GFP_KERNEL);
>     
>     Reported-by: Audun Hoem <audun.hoem@gmail.com>
>     Signed-off-by: Florian Mickler <florian@mickler.org>
> 
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index 90b54d4..06f5c44 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -859,7 +859,7 @@ sub annotate_values {
>  				$av_preprocessor = 0;
>  			}
>  
> -		} elsif ($cur =~ /^(\(\s*$Type\s*)\)/) {
> +		} elsif ($cur =~ /^(\(\s*$Type\s*)\)/ && $av_pending eq '_') {
>  			print "CAST($1)\n" if ($dbg_values > 1);
>  			push(@av_paren_type, $type);
>  			$type = 'C';

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

* Re: [PATCH] checkpatch.pl: fix CAST detection to not screw with parens handling
  2010-11-17  7:30     ` Florian Mickler
@ 2010-11-23 14:15       ` Andy Whitcroft
  0 siblings, 0 replies; 7+ messages in thread
From: Andy Whitcroft @ 2010-11-23 14:15 UTC (permalink / raw)
  To: Florian Mickler; +Cc: Audun Hoem, linux-kernel

On Wed, Nov 17, 2010 at 08:30:31AM +0100, Florian Mickler wrote:
> 
> Hi Andy, 
> 
> did you get this?

Yep sorry, need to get these hooverered up into my tree.

-apw

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

end of thread, other threads:[~2010-11-23 14:15 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-11-02 22:57 Bug in checkpatch.pl Audun Hoem
2010-11-03 12:04 ` [PATCH] checkpatch.pl: fix CAST detection to not screw with parens handling Florian Mickler
2010-11-03 15:20   ` Florian Mickler
2010-11-03 15:26     ` Audun Hoem
2010-11-03 16:07       ` Florian Mickler
2010-11-17  7:30     ` Florian Mickler
2010-11-23 14:15       ` Andy Whitcroft

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).