The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH] checkpatch.pl: Check for functions without a real prototype
  2012-03-16 21:22 [PATCH] x86: Merge x86_32 and x86_64 cpu_idle() H. Peter Anvin
@ 2012-03-16 23:04 ` Richard Weinberger
  2012-03-16 23:31   ` Joe Perches
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Weinberger @ 2012-03-16 23:04 UTC (permalink / raw)
  To: joe; +Cc: apw, linux-kernel, Richard Weinberger, hpa

Functions like this one are evil:

void foo()
{
	...
}

Signed-off-by: Richard Weinberger <richard@nod.at>
CC: hpa@zytor.com
---
 scripts/checkpatch.pl |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index a3b9782..acc5e0f 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -2304,6 +2304,19 @@ sub process {
 			      "open brace '{' following function declarations go on the next line\n" . $herecurr);
 		}
 
+		if ($line=~/$Type\s*$Ident\(\)/) {
+			ERROR("FUNCTION_NO_PROTOTYPE",
+"Function without a real prototype\n" . $herecurr .
+"Thou shalt not, in the language of C, under any circumstances, on the
+pain of death, declare or define a function with an empty set of
+parentheses, for though in the language of C++ it meaneth the same as
+(void), in C it meaneth (...) which is of meaningless as there be no
+anchor argument by which the types of the varadic arguments can be
+expressed, and which misleadeth the compiler into allowing unsavory code
+and in some cases generate really ugly stuff for varadic handling.
+	-hpa\n");
+		}
+
 # open braces for enum, union and struct go on the same line.
 		if ($line =~ /^.\s*{/ &&
 		    $prevline =~ /^.\s*(?:typedef\s+)?(enum|union|struct)(?:\s+$Ident)?\s*$/) {
-- 
1.7.7.3


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

* Re: [PATCH] checkpatch.pl: Check for functions without a real prototype
  2012-03-16 23:04 ` [PATCH] checkpatch.pl: Check for functions without a real prototype Richard Weinberger
@ 2012-03-16 23:31   ` Joe Perches
  2012-03-16 23:35     ` Richard Weinberger
  0 siblings, 1 reply; 8+ messages in thread
From: Joe Perches @ 2012-03-16 23:31 UTC (permalink / raw)
  To: Richard Weinberger; +Cc: apw, linux-kernel, hpa

On Sat, 2012-03-17 at 00:04 +0100, Richard Weinberger wrote:
> Functions like this one are evil:
> void foo()
> {
> 	...
> }
[]
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
[]
> @@ -2304,6 +2304,19 @@ sub process {
[]
> +		if ($line=~/$Type\s*$Ident\(\)/) {

Perhaps this should be:
		if ($line =~ /(\b$Type\s+$Ident)\s*\(\s*\)/) {

> +			ERROR("FUNCTION_NO_PROTOTYPE",
> +"Function without a real prototype\n" . $herecurr .

Sensible, but maybe:
"Bad function definition - $1() should probably be $1(void)\n"

> +"Thou shalt not, in the language of C, under any circumstances, on the
> +pain of death, declare or define a function with an empty set of
> +parentheses, for though in the language of C++ it meaneth the same as
> +(void), in C it meaneth (...) which is of meaningless as there be no
> +anchor argument by which the types of the varadic arguments can be
> +expressed, and which misleadeth the compiler into allowing unsavory code
> +and in some cases generate really ugly stuff for varadic handling.
> +	-hpa\n");

Humorous once, painful in twice, annoying after.

cheers,  Joe


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

* Re: [PATCH] checkpatch.pl: Check for functions without a real prototype
  2012-03-16 23:31   ` Joe Perches
@ 2012-03-16 23:35     ` Richard Weinberger
  0 siblings, 0 replies; 8+ messages in thread
From: Richard Weinberger @ 2012-03-16 23:35 UTC (permalink / raw)
  To: Joe Perches; +Cc: apw, linux-kernel, hpa

[-- Attachment #1: Type: text/plain, Size: 999 bytes --]

Am 17.03.2012 00:31, schrieb Joe Perches:
> Perhaps this should be:
> 		if ($line =~ /(\b$Type\s+$Ident)\s*\(\s*\)/) {

Makes sense.

>> +			ERROR("FUNCTION_NO_PROTOTYPE",
>> +"Function without a real prototype\n" . $herecurr .
> 
> Sensible, but maybe:
> "Bad function definition - $1() should probably be $1(void)\n"

Too.

>> +"Thou shalt not, in the language of C, under any circumstances, on the
>> +pain of death, declare or define a function with an empty set of
>> +parentheses, for though in the language of C++ it meaneth the same as
>> +(void), in C it meaneth (...) which is of meaningless as there be no
>> +anchor argument by which the types of the varadic arguments can be
>> +expressed, and which misleadeth the compiler into allowing unsavory code
>> +and in some cases generate really ugly stuff for varadic handling.
>> +	-hpa\n");
> 
> Humorous once, painful in twice, annoying after.
> 

It has to be annoying and painful. :-)

Thanks,
//richard


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]

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

* [PATCH] checkpatch.pl: Check for functions without a real prototype
@ 2013-11-18 22:31 Richard Weinberger
  2013-11-18 22:36 ` Joe Perches
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Weinberger @ 2013-11-18 22:31 UTC (permalink / raw)
  To: hpa; +Cc: linux-kernel, apw, joe, bp, Richard Weinberger

Functions like this one are evil:

void foo()
{
	...
}

Signed-off-by: Richard Weinberger <richard@nod.at>
CC: hpa@zytor.com
---
 scripts/checkpatch.pl | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 61090e0..a1b846d 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -2785,6 +2785,19 @@ sub process {
 			      "open brace '{' following function declarations go on the next line\n" . $herecurr);
 		}
 
+		if ($line=~/$Type\s*$Ident\(\)/) {
+			ERROR("FUNCTION_NO_PROTOTYPE",
+"Function without a real prototype\n" . $herecurr .
+"Thou shalt not, in the language of C, under any circumstances, on the
+pain of death, declare or define a function with an empty set of
+parentheses, for though in the language of C++ it meaneth the same as
+(void), in C it meaneth (...) which is of meaningless as there be no
+anchor argument by which the types of the varadic arguments can be
+expressed, and which misleadeth the compiler into allowing unsavory code
+and in some cases generate really ugly stuff for varadic handling.
+	-hpa\n");
+		}
+
 # open braces for enum, union and struct go on the same line.
 		if ($line =~ /^.\s*{/ &&
 		    $prevline =~ /^.\s*(?:typedef\s+)?(enum|union|struct)(?:\s+$Ident)?\s*$/) {
-- 
1.8.4.2


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

* Re: [PATCH] checkpatch.pl: Check for functions without a real prototype
  2013-11-18 22:31 [PATCH] checkpatch.pl: Check for functions without a real prototype Richard Weinberger
@ 2013-11-18 22:36 ` Joe Perches
  2013-11-18 22:40   ` Richard Weinberger
  0 siblings, 1 reply; 8+ messages in thread
From: Joe Perches @ 2013-11-18 22:36 UTC (permalink / raw)
  To: Richard Weinberger; +Cc: hpa, linux-kernel, apw, bp

On Mon, 2013-11-18 at 23:31 +0100, Richard Weinberger wrote:
> Functions like this one are evil:
> 
> void foo()
> {
> 	...
> }
> 
> Signed-off-by: Richard Weinberger <richard@nod.at>
> CC: hpa@zytor.com

I won't take simple resubmissions without updating
based on the notes I gave you.

And now, this should be updated to allow --fix use too.

I'll take care of it instead.


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

* Re: [PATCH] checkpatch.pl: Check for functions without a real prototype
  2013-11-18 22:36 ` Joe Perches
@ 2013-11-18 22:40   ` Richard Weinberger
  2013-11-18 23:23     ` [PATCH] checkpatch.pl: Check for function declarations without arguments Joe Perches
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Weinberger @ 2013-11-18 22:40 UTC (permalink / raw)
  To: Joe Perches; +Cc: hpa, linux-kernel, apw, bp

Am Montag, 18. November 2013, 14:36:22 schrieb Joe Perches:
> On Mon, 2013-11-18 at 23:31 +0100, Richard Weinberger wrote:
> > Functions like this one are evil:
> > 
> > void foo()
> > {
> > 
> > 	...
> > 
> > }
> > 
> > Signed-off-by: Richard Weinberger <richard@nod.at>
> > CC: hpa@zytor.com
> 
> I won't take simple resubmissions without updating
> based on the notes I gave you.

Of course. I managed it to send the *old* patch file.
Will resend in a minute...

> And now, this should be updated to allow --fix use too.
> 
> I'll take care of it instead.

Thanks,
//richard

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

* [PATCH] checkpatch.pl: Check for function declarations without arguments
  2013-11-18 22:40   ` Richard Weinberger
@ 2013-11-18 23:23     ` Joe Perches
  2013-11-18 23:30       ` Borislav Petkov
  0 siblings, 1 reply; 8+ messages in thread
From: Joe Perches @ 2013-11-18 23:23 UTC (permalink / raw)
  To: Richard Weinberger, Andrew Morton; +Cc: hpa, linux-kernel, apw, bp

Functions like this one are evil:

void foo()
{
	...
}

Because these functions allow variadic arguments without
checking the arguments at all.
 
Original-patch-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Joe Perches <joe@perches.com>
---
 scripts/checkpatch.pl | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 61090e0..2e1ff0c 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -2634,6 +2634,15 @@ sub process {
 				$herecurr);
                }
 
+# check for function declarations without arguments like "int foo()"
+		if ($line =~ /(\b$Type\s+$Ident)\s*\(\s*\)/) {
+			if (ERROR("FUNCTION_WITHOUT_ARGS",
+				  "Bad function definition - $1() should probably be $1(void)\n" . $herecurr) &&
+			    $fix) {
+				$fixed[$linenr - 1] =~ s/(\b($Type)\s+($Ident))\s*\(\s*\)/$2 $3(void)/;
+			}
+		}
+
 # check for declarations of struct pci_device_id
 		if ($line =~ /\bstruct\s+pci_device_id\s+\w+\s*\[\s*\]\s*\=\s*\{/) {
 			WARN("DEFINE_PCI_DEVICE_TABLE",



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

* Re: [PATCH] checkpatch.pl: Check for function declarations without arguments
  2013-11-18 23:23     ` [PATCH] checkpatch.pl: Check for function declarations without arguments Joe Perches
@ 2013-11-18 23:30       ` Borislav Petkov
  0 siblings, 0 replies; 8+ messages in thread
From: Borislav Petkov @ 2013-11-18 23:30 UTC (permalink / raw)
  To: Joe Perches; +Cc: Richard Weinberger, Andrew Morton, hpa, linux-kernel, apw

On Mon, Nov 18, 2013 at 03:23:01PM -0800, Joe Perches wrote:
> Functions like this one are evil:
> 
> void foo()
> {
> 	...
> }
> 
> Because these functions allow variadic arguments without
> checking the arguments at all.
>  
> Original-patch-by: Richard Weinberger <richard@nod.at>
> Signed-off-by: Joe Perches <joe@perches.com>
> ---
>  scripts/checkpatch.pl | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index 61090e0..2e1ff0c 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -2634,6 +2634,15 @@ sub process {
>  				$herecurr);
>                 }
>  
> +# check for function declarations without arguments like "int foo()"
> +		if ($line =~ /(\b$Type\s+$Ident)\s*\(\s*\)/) {
> +			if (ERROR("FUNCTION_WITHOUT_ARGS",
> +				  "Bad function definition - $1() should probably be $1(void)\n" . $herecurr) &&

I liked the nice preaching comment better - this one is boring.

-- 
Regards/Gruss,
    Boris.

Sent from a fat crate under my desk. Formatting is fine.
--

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

end of thread, other threads:[~2013-11-18 23:30 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-18 22:31 [PATCH] checkpatch.pl: Check for functions without a real prototype Richard Weinberger
2013-11-18 22:36 ` Joe Perches
2013-11-18 22:40   ` Richard Weinberger
2013-11-18 23:23     ` [PATCH] checkpatch.pl: Check for function declarations without arguments Joe Perches
2013-11-18 23:30       ` Borislav Petkov
  -- strict thread matches above, loose matches on Subject: below --
2012-03-16 21:22 [PATCH] x86: Merge x86_32 and x86_64 cpu_idle() H. Peter Anvin
2012-03-16 23:04 ` [PATCH] checkpatch.pl: Check for functions without a real prototype Richard Weinberger
2012-03-16 23:31   ` Joe Perches
2012-03-16 23:35     ` Richard Weinberger

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