All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] checkpatch: Miscellaneous cleanups
@ 2014-10-15 19:32 Joe Perches
  2014-10-15 19:32 ` [PATCH 1/3] checkpatch: Add an error test for no space before comma Joe Perches
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Joe Perches @ 2014-10-15 19:32 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Andy Whitcroft, linux-kernel

Joe Perches (3):
  checkpatch: Add an error test for no space before comma
  checkpatch: Add error on use of attribute((weak)) or __weak
  checkpatch: Improve test for no space after cast

 scripts/checkpatch.pl | 34 +++++++++++++++++++++++++++++++---
 1 file changed, 31 insertions(+), 3 deletions(-)

-- 
2.1.0


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

* [PATCH 1/3] checkpatch: Add an error test for no space before comma
  2014-10-15 19:32 [PATCH 0/3] checkpatch: Miscellaneous cleanups Joe Perches
@ 2014-10-15 19:32 ` Joe Perches
  2014-10-15 19:32 ` [PATCH 2/3] checkpatch: Add error on use of attribute((weak)) or __weak Joe Perches
  2014-10-15 19:32 ` [PATCH 3/3] checkpatch: Improve test for no space after cast Joe Perches
  2 siblings, 0 replies; 10+ messages in thread
From: Joe Perches @ 2014-10-15 19:32 UTC (permalink / raw)
  To: Andrew Morton, Andy Whitcroft; +Cc: linux-kernel

Using code like:

	int foo , bar;

is not preferred to:

	int foo, bar;

so emit an error on this style.

Signed-off-by: Joe Perches <joe@perches.com>
---
 scripts/checkpatch.pl | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 374abf4..696254e 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -3563,14 +3563,33 @@ sub process {
 						}
 					}
 
-				# , must have a space on the right.
+				# , must not have a space before and must have a space on the right.
 				} elsif ($op eq ',') {
+					my $rtrim_before = 0;
+					my $space_after = 0;
+					if ($ctx =~ /Wx./) {
+						if (ERROR("SPACING",
+							  "space prohibited before that '$op' $at\n" . $hereptr)) {
+							$line_fixed = 1;
+							$rtrim_before = 1;
+						}
+					}
 					if ($ctx !~ /.x[WEC]/ && $cc !~ /^}/) {
 						if (ERROR("SPACING",
 							  "space required after that '$op' $at\n" . $hereptr)) {
-							$good = $fix_elements[$n] . trim($fix_elements[$n + 1]) . " ";
 							$line_fixed = 1;
 							$last_after = $n;
+							$space_after = 1;
+						}
+					}
+					if ($rtrim_before || $space_after) {
+						if ($rtrim_before) {
+							$good = rtrim($fix_elements[$n]) . trim($fix_elements[$n + 1]);
+						} else {
+							$good = $fix_elements[$n] . trim($fix_elements[$n + 1]);
+						}
+						if ($space_after) {
+							$good .= " ";
 						}
 					}
 
-- 
2.1.0


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

* [PATCH 2/3] checkpatch: Add error on use of attribute((weak)) or __weak
  2014-10-15 19:32 [PATCH 0/3] checkpatch: Miscellaneous cleanups Joe Perches
  2014-10-15 19:32 ` [PATCH 1/3] checkpatch: Add an error test for no space before comma Joe Perches
@ 2014-10-15 19:32 ` Joe Perches
  2014-10-15 19:42   ` Andrew Morton
  2014-10-15 19:32 ` [PATCH 3/3] checkpatch: Improve test for no space after cast Joe Perches
  2 siblings, 1 reply; 10+ messages in thread
From: Joe Perches @ 2014-10-15 19:32 UTC (permalink / raw)
  To: Andrew Morton, Andy Whitcroft; +Cc: linux-kernel

Using weak can have unintended link defects.
Emit an error on its use.

Signed-off-by: Joe Perches <joe@perches.com>
---
 scripts/checkpatch.pl | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 696254e..692fdb6 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -4671,6 +4671,14 @@ sub process {
 			}
 		}
 
+# Check for __attribute__ weak, or __weak (may have link issues)
+		if ($realfile !~ m@\binclude/uapi/@ &&
+		    ($line =~ /\b__attribute__\s*\(\s*\(.*\bweak\b/ ||
+		     $line =~ \b__weak\b/)) {
+			ERROR("AVOID_WEAK",
+			      "Using weak can have unintended link defects" . $herecurr);
+		}
+
 # check for sizeof(&)
 		if ($line =~ /\bsizeof\s*\(\s*\&/) {
 			WARN("SIZEOF_ADDRESS",
-- 
2.1.0


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

* [PATCH 3/3] checkpatch: Improve test for no space after cast
  2014-10-15 19:32 [PATCH 0/3] checkpatch: Miscellaneous cleanups Joe Perches
  2014-10-15 19:32 ` [PATCH 1/3] checkpatch: Add an error test for no space before comma Joe Perches
  2014-10-15 19:32 ` [PATCH 2/3] checkpatch: Add error on use of attribute((weak)) or __weak Joe Perches
@ 2014-10-15 19:32 ` Joe Perches
  2 siblings, 0 replies; 10+ messages in thread
From: Joe Perches @ 2014-10-15 19:32 UTC (permalink / raw)
  To: Andrew Morton, Andy Whitcroft; +Cc: linux-kernel

sizeof(foo) is not a cast, allow a space after it.

Signed-off-by: Joe Perches <joe@perches.com>
Tested-by: Kalle Valo <kvalo@qca.qualcomm.com>
---
 scripts/checkpatch.pl | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 692fdb6..21dac46 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -2515,7 +2515,8 @@ sub process {
 			}
 		}
 
-		if ($line =~ /^\+.*\(\s*$Type\s*\)[ \t]+(?!$Assignment|$Arithmetic|{)/) {
+		if ($line =~ /^\+.*(\w+\s*)?\(\s*$Type\s*\)[ \t]+(?!$Assignment|$Arithmetic|[,;\({\[\<\>])/ &&
+		    (!defined($1) || $1 !~ /sizeof\s*/)) {
 			if (CHK("SPACING",
 				"No space is necessary after a cast\n" . $herecurr) &&
 			    $fix) {
-- 
2.1.0


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

* Re: [PATCH 2/3] checkpatch: Add error on use of attribute((weak)) or __weak
  2014-10-15 19:32 ` [PATCH 2/3] checkpatch: Add error on use of attribute((weak)) or __weak Joe Perches
@ 2014-10-15 19:42   ` Andrew Morton
  2014-10-15 19:45     ` Joe Perches
  0 siblings, 1 reply; 10+ messages in thread
From: Andrew Morton @ 2014-10-15 19:42 UTC (permalink / raw)
  To: Joe Perches; +Cc: Andy Whitcroft, linux-kernel

On Wed, 15 Oct 2014 12:32:08 -0700 Joe Perches <joe@perches.com> wrote:

> Using weak can have unintended link defects.
> Emit an error on its use.

Well, we don't want a warning about use of __weak in function
definitions.  Only in declarations.

> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -4671,6 +4671,14 @@ sub process {
>  			}
>  		}
>  
> +# Check for __attribute__ weak, or __weak (may have link issues)
> +		if ($realfile !~ m@\binclude/uapi/@ &&

And this bit maybe is checking for use in a header file, which is not
as good as checking for a declaration but is probably good enough. 
However the "uapi" bit is confusing.

Can we have a better changelog please?

> +		    ($line =~ /\b__attribute__\s*\(\s*\(.*\bweak\b/ ||
> +		     $line =~ \b__weak\b/)) {
> +			ERROR("AVOID_WEAK",
> +			      "Using weak can have unintended link defects" . $herecurr);
> +		}
> +
>  # check for sizeof(&)
>  		if ($line =~ /\bsizeof\s*\(\s*\&/) {
>  			WARN("SIZEOF_ADDRESS",
> -- 
> 2.1.0

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

* Re: [PATCH 2/3] checkpatch: Add error on use of attribute((weak)) or __weak
  2014-10-15 19:42   ` Andrew Morton
@ 2014-10-15 19:45     ` Joe Perches
  2014-10-15 19:50       ` Andrew Morton
  0 siblings, 1 reply; 10+ messages in thread
From: Joe Perches @ 2014-10-15 19:45 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Andy Whitcroft, linux-kernel

On Wed, 2014-10-15 at 12:42 -0700, Andrew Morton wrote:
> On Wed, 15 Oct 2014 12:32:08 -0700 Joe Perches <joe@perches.com> wrote:
> 
> > Using weak can have unintended link defects.
> > Emit an error on its use.
> 
> Well, we don't want a warning about use of __weak in function
> definitions.  Only in declarations.

Why is that?

> > --- a/scripts/checkpatch.pl
> > +++ b/scripts/checkpatch.pl
> > @@ -4671,6 +4671,14 @@ sub process {
> >  			}
> >  		}
> >  
> > +# Check for __attribute__ weak, or __weak (may have link issues)
> > +		if ($realfile !~ m@\binclude/uapi/@ &&
> 
> And this bit maybe is checking for use in a header file, which is not
> as good as checking for a declaration but is probably good enough. 
> However the "uapi" bit is confusing.
> 
> Can we have a better changelog please?

Suggestions?


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

* Re: [PATCH 2/3] checkpatch: Add error on use of attribute((weak)) or __weak
  2014-10-15 19:45     ` Joe Perches
@ 2014-10-15 19:50       ` Andrew Morton
  2014-10-15 19:52         ` Joe Perches
  0 siblings, 1 reply; 10+ messages in thread
From: Andrew Morton @ 2014-10-15 19:50 UTC (permalink / raw)
  To: Joe Perches; +Cc: Andy Whitcroft, linux-kernel

On Wed, 15 Oct 2014 12:45:48 -0700 Joe Perches <joe@perches.com> wrote:

> On Wed, 2014-10-15 at 12:42 -0700, Andrew Morton wrote:
> > On Wed, 15 Oct 2014 12:32:08 -0700 Joe Perches <joe@perches.com> wrote:
> > 
> > > Using weak can have unintended link defects.
> > > Emit an error on its use.
> > 
> > Well, we don't want a warning about use of __weak in function
> > definitions.  Only in declarations.
> 
> Why is that?

Because the problem we're trying to detect is when __weak is used on a
declaration.

This is OK:

foo.h:
extern int foo(void);
foo.c:
int __weak foo(void)
{
	...
}

But this is not OK:

foo.h:
extern __weak int foo(void);
foo.c:
int __weak foo(void)
{
	...
}


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

* Re: [PATCH 2/3] checkpatch: Add error on use of attribute((weak)) or __weak
  2014-10-15 19:50       ` Andrew Morton
@ 2014-10-15 19:52         ` Joe Perches
  2014-10-15 20:01           ` Andrew Morton
  0 siblings, 1 reply; 10+ messages in thread
From: Joe Perches @ 2014-10-15 19:52 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Andy Whitcroft, linux-kernel

On Wed, 2014-10-15 at 12:50 -0700, Andrew Morton wrote:
> On Wed, 15 Oct 2014 12:45:48 -0700 Joe Perches <joe@perches.com> wrote:
> 
> > On Wed, 2014-10-15 at 12:42 -0700, Andrew Morton wrote:
> > > On Wed, 15 Oct 2014 12:32:08 -0700 Joe Perches <joe@perches.com> wrote:
> > > 
> > > > Using weak can have unintended link defects.
> > > > Emit an error on its use.
> > > 
> > > Well, we don't want a warning about use of __weak in function
> > > definitions.  Only in declarations.
> > 
> > Why is that?
> 
> Because the problem we're trying to detect is when __weak is used on a
> declaration.
> 
> This is OK:
> 
> foo.h:
> extern int foo(void);
> foo.c:
> int __weak foo(void)
> {
> 	...
> }
> 
> But this is not OK:
> 
> foo.h:
> extern __weak int foo(void);
> foo.c:
> int __weak foo(void)
> {
> 	...
> }
> 

And this?

foo.c:

extern __weak int foo(void);

int __weak foo(void)
{
}



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

* Re: [PATCH 2/3] checkpatch: Add error on use of attribute((weak)) or __weak
  2014-10-15 19:52         ` Joe Perches
@ 2014-10-15 20:01           ` Andrew Morton
  2014-10-15 20:46             ` [PATCH 2/3 V2] [PATCH] checkpatch: Add error on use of attribute((weak)) or __weak declarations Joe Perches
  0 siblings, 1 reply; 10+ messages in thread
From: Andrew Morton @ 2014-10-15 20:01 UTC (permalink / raw)
  To: Joe Perches; +Cc: Andy Whitcroft, linux-kernel

On Wed, 15 Oct 2014 12:52:44 -0700 Joe Perches <joe@perches.com> wrote:

> On Wed, 2014-10-15 at 12:50 -0700, Andrew Morton wrote:
> > On Wed, 15 Oct 2014 12:45:48 -0700 Joe Perches <joe@perches.com> wrote:
> > 
> > > On Wed, 2014-10-15 at 12:42 -0700, Andrew Morton wrote:
> > > > On Wed, 15 Oct 2014 12:32:08 -0700 Joe Perches <joe@perches.com> wrote:
> > > > 
> > > > > Using weak can have unintended link defects.
> > > > > Emit an error on its use.
> > > > 
> > > > Well, we don't want a warning about use of __weak in function
> > > > definitions.  Only in declarations.
> > > 
> > > Why is that?
> > 
> > Because the problem we're trying to detect is when __weak is used on a
> > declaration.
> > 
> > This is OK:
> > 
> > foo.h:
> > extern int foo(void);
> > foo.c:
> > int __weak foo(void)
> > {
> > 	...
> > }
> > 
> > But this is not OK:
> > 
> > foo.h:
> > extern __weak int foo(void);
> > foo.c:
> > int __weak foo(void)
> > {
> > 	...
> > }
> > 
> 
> And this?
> 
> foo.c:
> 
> extern __weak int foo(void);
> 
> int __weak foo(void)
> {
> }
> 

That's why I just said "And this bit maybe is checking for use in a
header file, which is not as good as checking for a declaration but is
probably good enough."

I don't think that would trigger the bug anyway.  The problem is that

extern __weak int foo(void);

int foo(void)
{
}

unexpectedly and undesirably turns foo() into __weak.

I think it would be sufficient to check for __weak in a declaration. 
If that isn't practical then checking for __weak in a .h file should
suffice.


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

* [PATCH 2/3 V2] [PATCH] checkpatch: Add error on use of attribute((weak)) or __weak declarations
  2014-10-15 20:01           ` Andrew Morton
@ 2014-10-15 20:46             ` Joe Perches
  0 siblings, 0 replies; 10+ messages in thread
From: Joe Perches @ 2014-10-15 20:46 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Andy Whitcroft, linux-kernel

Using weak declarations can have unintended link defects.
Emit an error on its use.

Signed-off-by: Joe Perches <joe@perches.com>
---
Maybe you prefer this.
It only warns on declarations.

 scripts/checkpatch.pl | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 696254e..8a577aa 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -4671,6 +4671,15 @@ sub process {
 			}
 		}
 
+# Check for __attribute__ weak, or __weak declarations (may have link issues)
+		if ($^V && $^V ge 5.10.0 &&
+		    $line =~ /(?:$Declare|$DeclareMisordered)\s*$Ident\s*$balanced_parens\s*(?:$Attribute)?\s*;/ &&
+		    ($line =~ /\b__attribute__\s*\(\s*\(.*\bweak\b/ ||
+		     $line =~ /\b__weak\b/)) {
+			ERROR("WEAK_DECLARATION",
+			      "Using weak declarations can have unintended link defects\n" . $herecurr);
+		}
+
 # check for sizeof(&)
 		if ($line =~ /\bsizeof\s*\(\s*\&/) {
 			WARN("SIZEOF_ADDRESS",
-- 
2.1.0




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

end of thread, other threads:[~2014-10-15 20:46 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-15 19:32 [PATCH 0/3] checkpatch: Miscellaneous cleanups Joe Perches
2014-10-15 19:32 ` [PATCH 1/3] checkpatch: Add an error test for no space before comma Joe Perches
2014-10-15 19:32 ` [PATCH 2/3] checkpatch: Add error on use of attribute((weak)) or __weak Joe Perches
2014-10-15 19:42   ` Andrew Morton
2014-10-15 19:45     ` Joe Perches
2014-10-15 19:50       ` Andrew Morton
2014-10-15 19:52         ` Joe Perches
2014-10-15 20:01           ` Andrew Morton
2014-10-15 20:46             ` [PATCH 2/3 V2] [PATCH] checkpatch: Add error on use of attribute((weak)) or __weak declarations Joe Perches
2014-10-15 19:32 ` [PATCH 3/3] checkpatch: Improve test for no space after cast Joe Perches

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.