bug in checkpatch (on pointers to typedefs?)

Previous thread: [PATCH] leds: remove "checkpatch.pl" warnings by Németh Márton on Sunday, February 10, 2008 - 10:05 am. (1 message)

Next thread: [PATCH] splice: fix user pointer access in get_iovec_page_array() by Pekka J Enberg on Sunday, February 10, 2008 - 10:47 am. (10 messages)
To: Andy Whitcroft <apw@...>
Cc: LKML <linux-kernel@...>
Date: Sunday, February 10, 2008 - 10:33 am

Hi

Checkpatch in current mainline outputs following errors:

$ ./scripts/checkpatch.pl -q --file ./fs/udf/misc.c
ERROR: need consistent spacing around '*' (ctx:WxV)
#205: FILE: fs/udf/misc.c:205:
+ tag *tag_p;
^

$ ./scripts/checkpatch.pl -q --file ./fs/udf/unicode.c
ERROR: need consistent spacing around '*' (ctx:WxV)
#48: FILE: fs/udf/unicode.c:48:
+int udf_build_ustr(struct ustr *dest, dstring *ptr, int size)
^
(...)

I think the code is ok.

Marcin
--

To: Marcin Slusarz <marcin.slusarz@...>
Cc: Andy Whitcroft <apw@...>, LKML <linux-kernel@...>
Date: Wednesday, February 13, 2008 - 3:43 pm

I'd say "don't add any new typedefs" (and perhaps get rid of old ones).

--

To: Jan Engelhardt <jengelh@...>
Cc: Marcin Slusarz <marcin.slusarz@...>, LKML <linux-kernel@...>
Date: Thursday, February 14, 2008 - 6:06 am

It should be doing that at the site of the new typedef :)

-apw
--

To: Andy Whitcroft <apw@...>
Cc: Marcin Slusarz <marcin.slusarz@...>, LKML <linux-kernel@...>
Date: Thursday, February 14, 2008 - 2:29 pm

Additionally, yes.
Given:

typedef struct {
...
} tag_t;
void foo(void)
{
tag_t name;
}

A user adding

+ tag_t newthing;

could at the same time give the struct a name if it already does not
have one and instead use

+ struct tag newthing;

then.
--

To: Marcin Slusarz <marcin.slusarz@...>
Cc: LKML <linux-kernel@...>
Date: Monday, February 11, 2008 - 6:23 am

Yep the code is clearly correct. Can I have the whole patch fragment
you got these against so I can figure out why we are unable to detect
these two as types, I would expect us to have done so. Also what
version of checkpatch is this? There is a version string at the top.

-apw
--

To: Andy Whitcroft <apw@...>
Cc: LKML <linux-kernel@...>
Date: Monday, February 11, 2008 - 2:09 pm

It's current Linus git tree (both checkpatch and "testcase").

Marcin
--

To: Andy Whitcroft <apw@...>
Cc: Marcin Slusarz <marcin.slusarz@...>, LKML <linux-kernel@...>
Date: Monday, February 11, 2008 - 12:05 pm

I saw this too with checkpatch.pl version 0.12
It seems like checkpatch.pl knows only about types derived
from @typeList by build_types.

Example below...

Benny

$ cat <<EOF | scripts/checkpatch.pl -
Signed-off-by: john@smith.net
---
diff a/f.c b/f.c
--- a/f.c
+++ b/f.c
@@ -1,0 +1,2 @@
+foo(int a, my_uint32 *);
+bar(int a, my_uint32_t *);
EOF
ERROR: need consistent spacing around '*' (ctx:WxB)
#7: FILE: f.c:1:
+foo(int a, my_uint32 *);
^

total: 1 errors, 0 warnings, 2 lines checked

--

To: Benny Halevy <bhalevy@...>
Cc: Marcin Slusarz <marcin.slusarz@...>, LKML <linux-kernel@...>
Date: Monday, February 11, 2008 - 12:40 pm

But that isn't actually syntactically correct code is it? You have types
as parameters like a function declaration, but no return type. So there
is no hint to checkpatch that this is a function declaration and therefore
the parameters are not expected to be types, nor are they checked as such.

The following diff is clean on the latest version of checkpatch:

Signed-off-by: john@smith.net
---
diff a/f.c b/f.c
--- a/f.c
+++ b/f.c
@@ -1,0 +1,2 @@
+void foo(int a, my_uint32 *);
+int bar(int a, my_uint32_t *);
EOF

Could you try out the version of checkpatch at the URL below on the real
patch you are using to test, and let me know if it works. There are
a number of improvements to type tracking in the face of ifdef's and
the like. If it doesn't could I have the hunk which fails:

http://www.kernel.org/pub/linux/kernel/people/apw/checkpatch/checkpatch....

-apw
--

To: Andy Whitcroft <apw@...>
Cc: Marcin Slusarz <marcin.slusarz@...>, LKML <linux-kernel@...>
Date: Monday, February 11, 2008 - 12:58 pm

OK, but the return type doesn't have to be in the patched line, it could be in
a synchronization line or even missing if the function has a long multi-line argument

Your modified patch passes with version 0.12 as well as checkpatch.pl-next

However, the following patch that has the return type in the synchronization lines
still produces the same error:

$ ./checkpatch.pl-next -
Signed-off-by: john@smith.net
---
diff a/f.c b/f.c
--- a/f.c
+++ b/f.c
@@ -1,2 +1,4 @@
int
+foo(int a, my_uint32 *);
int
+bar(int a, my_uint32_t *);
ERROR: need consistent spacing around '*' (ctx:WxB)
#8: FILE: f.c:2:
+foo(int a, my_uint32 *);
^

--

To: Benny Halevy <bhalevy@...>
Cc: Marcin Slusarz <marcin.slusarz@...>, LKML <linux-kernel@...>
Date: Monday, February 11, 2008 - 2:42 pm

Ok, I guess thats fair criticism. Could you check out the current
checkpatch-next (0.14-8-g3737366 or later -9, -10 etc), and see if
that works. It seems to on the simple examples you sent me :).

Thanks.

-apw
--

To: Andy Whitcroft <apw@...>
Cc: Marcin Slusarz <marcin.slusarz@...>, LKML <linux-kernel@...>
Date: Tuesday, February 12, 2008 - 4:21 am

Confirmed with 0.14-8-g3737366.

Thanks!

Benny

Oh, and I really liked the fact that you print the patch file name

--

Previous thread: [PATCH] leds: remove "checkpatch.pl" warnings by Németh Márton on Sunday, February 10, 2008 - 10:05 am. (1 message)

Next thread: [PATCH] splice: fix user pointer access in get_iovec_page_array() by Pekka J Enberg on Sunday, February 10, 2008 - 10:47 am. (10 messages)