2011-06-24 21:45:19

by Ben Hutchings

[permalink] [raw]
Subject: [PATCH] sparse: Fix BUILD_BUG_ON_{ZERO,NULL} definitions

Commit 903c0c7cdc21f2ccb7562a7bbc70289c0c2b16ad ('sparse: define dummy
BUILD_BUG_ON definition for sparse') left these two broken. The ZERO
or NULL suffix specifies what the macro should expand to, not the
value that would indicate a bug.

Signed-off-by: Ben Hutchings <[email protected]>
---
sparse currently reports a syntax error and no useful warnings for any
source file which uses one of these macros. Since module_param() uses
BUILD_BUG_ON_ZERO(), that's a lot of source files.

Ben.

include/linux/kernel.h | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/linux/kernel.h b/include/linux/kernel.h
index fb0e732..fccd366 100644
--- a/include/linux/kernel.h
+++ b/include/linux/kernel.h
@@ -671,8 +671,8 @@ struct sysinfo {

#ifdef __CHECKER__
#define BUILD_BUG_ON_NOT_POWER_OF_2(n)
-#define BUILD_BUG_ON_ZERO(e)
-#define BUILD_BUG_ON_NULL(e)
+#define BUILD_BUG_ON_ZERO(e) ((size_t)0)
+#define BUILD_BUG_ON_NULL(e) ((void *)0)
#define BUILD_BUG_ON(condition)
#else /* __CHECKER__ */

--
1.7.4.4


--
Ben Hutchings, Senior Software Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.


2011-06-24 22:28:58

by Randy Dunlap

[permalink] [raw]
Subject: Re: [PATCH] sparse: Fix BUILD_BUG_ON_{ZERO,NULL} definitions

On Fri, 24 Jun 2011 22:45:12 +0100 Ben Hutchings wrote:

> Commit 903c0c7cdc21f2ccb7562a7bbc70289c0c2b16ad ('sparse: define dummy
> BUILD_BUG_ON definition for sparse') left these two broken. The ZERO
> or NULL suffix specifies what the macro should expand to, not the
> value that would indicate a bug.
>
> Signed-off-by: Ben Hutchings <[email protected]>
> ---
> sparse currently reports a syntax error and no useful warnings for any
> source file which uses one of these macros. Since module_param() uses
> BUILD_BUG_ON_ZERO(), that's a lot of source files.
>
> Ben.

This patch from 2011-MAY-30 also fixes these warnings, but the typecasting
in yours is probably better. :)

http://marc.info/?l=linux-kernel&m=130677145629121&w=2

Wait, 3.0-rc4 already has the above patch. Is yours still needed?


> include/linux/kernel.h | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/kernel.h b/include/linux/kernel.h
> index fb0e732..fccd366 100644
> --- a/include/linux/kernel.h
> +++ b/include/linux/kernel.h
> @@ -671,8 +671,8 @@ struct sysinfo {
>
> #ifdef __CHECKER__
> #define BUILD_BUG_ON_NOT_POWER_OF_2(n)
> -#define BUILD_BUG_ON_ZERO(e)
> -#define BUILD_BUG_ON_NULL(e)
> +#define BUILD_BUG_ON_ZERO(e) ((size_t)0)
> +#define BUILD_BUG_ON_NULL(e) ((void *)0)
> #define BUILD_BUG_ON(condition)
> #else /* __CHECKER__ */
>
> --


---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

2011-06-24 22:48:50

by Ben Hutchings

[permalink] [raw]
Subject: Re: [PATCH] sparse: Fix BUILD_BUG_ON_{ZERO,NULL} definitions

On Fri, 2011-06-24 at 15:28 -0700, Randy Dunlap wrote:
> On Fri, 24 Jun 2011 22:45:12 +0100 Ben Hutchings wrote:
>
> > Commit 903c0c7cdc21f2ccb7562a7bbc70289c0c2b16ad ('sparse: define dummy
> > BUILD_BUG_ON definition for sparse') left these two broken. The ZERO
> > or NULL suffix specifies what the macro should expand to, not the
> > value that would indicate a bug.
> >
> > Signed-off-by: Ben Hutchings <[email protected]>
> > ---
> > sparse currently reports a syntax error and no useful warnings for any
> > source file which uses one of these macros. Since module_param() uses
> > BUILD_BUG_ON_ZERO(), that's a lot of source files.
> >
> > Ben.
>
> This patch from 2011-MAY-30 also fixes these warnings, but the typecasting
> in yours is probably better. :)
>
> http://marc.info/?l=linux-kernel&m=130677145629121&w=2
>
> Wait, 3.0-rc4 already has the above patch. Is yours still needed?
[...]

Sorry, my baseline was a little out of date.

I'm not sure whether the type of BUILD_BUG_ON_ZERO() should be size_t;
that's just what the non-sparse definition works out as. In some cases
it could make a difference whether it's signed or not.

Ben.

--
Ben Hutchings, Senior Software Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.