All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Nazarewicz <mina86@mina86.com>
To: Joe Stringer <joe@ovn.org>, linux-kernel@vger.kernel.org
Cc: Ian Abbott <abbotti@mev.co.uk>, Arnd Bergmann <arnd@arndb.de>,
	Kees Cook <keescook@chromium.org>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH] compiler: Don't perform compiletime_assert with -O0.
Date: Wed, 30 Aug 2017 12:26:44 +0200	[thread overview]
Message-ID: <xa1tr2vtfj17.fsf@mina86.com> (raw)
In-Reply-To: <20170829230114.11662-1-joe@ovn.org>

On Tue, Aug 29 2017, Joe Stringer wrote:
> Recent changes[0] to make use of __compiletime_assert() from
> container_of() increased the usage of this macro, allowing developers to
> notice type conflicts in usage of container_of() at compile time.
> However, the implementation of __compiletime_assert relies on compiler
> optimizations to report an error. This means that if a developer uses
> "-O0" with any code that performs container_of(), the compiler will
> always report an error regardless of whether there is an actual problem
> in the code.
>
> This patch disables compile_time_assert when optimizations are disabled
> to allow such code to compile with CFLAGS="-O0".
>
> Example compilation failure:
>
> ./include/linux/compiler.h:547:38: error: call to ‘__compiletime_assert_94’ declared with attribute error: pointer type mismatch in container_of()
>   _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
>                                       ^
> ./include/linux/compiler.h:530:4: note: in definition of macro ‘__compiletime_assert’
>     prefix ## suffix();    \
>     ^~~~~~
> ./include/linux/compiler.h:547:2: note: in expansion of macro ‘_compiletime_assert’
>   _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
>   ^~~~~~~~~~~~~~~~~~~
> ./include/linux/build_bug.h:46:37: note: in expansion of macro ‘compiletime_assert’
>  #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
>                                      ^~~~~~~~~~~~~~~~~~
> ./include/linux/kernel.h:860:2: note: in expansion of macro ‘BUILD_BUG_ON_MSG’
>   BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
>   ^~~~~~~~~~~~~~~~
>
> [0] http://lkml.kernel.org/r/20170525120316.24473-7-abbotti@mev.co.uk
>
> Signed-off-by: Joe Stringer <joe@ovn.org>
> Cc: Ian Abbott <abbotti@mev.co.uk>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Michal Nazarewicz <mina86@mina86.com>
> Cc: Kees Cook <keescook@chromium.org>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> ---
>  include/linux/compiler.h | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/include/linux/compiler.h b/include/linux/compiler.h
> index eca8ad75e28b..b67e5ec9b810 100644
> --- a/include/linux/compiler.h
> +++ b/include/linux/compiler.h
> @@ -517,7 +517,8 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
>  # define __compiletime_error_fallback(condition) do { } while (0)
>  #endif
>  
> -#define __compiletime_assert(condition, msg, prefix, suffix)		\
> +#ifdef __OPTIMIZE__
> +# define __compiletime_assert(condition, msg, prefix, suffix)		\
>  	do {								\
>  		bool __cond = !(condition);				\
>  		extern void prefix ## suffix(void) __compiletime_error(msg); \
> @@ -525,6 +526,9 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
>  			prefix ## suffix();				\
>  		__compiletime_error_fallback(__cond);			\
>  	} while (0)
> +#else
> +# define __compiletime_assert(condition, msg, prefix, suffix)

+# define __compiletime_assert(condition, msg, prefix, suffix) \
+	do { } while (0)

With that fix, 

Acked-by: Michal Nazarewicz <mina86@mina86.com>

> +#endif
>  
>  #define _compiletime_assert(condition, msg, prefix, suffix) \
>  	__compiletime_assert(condition, msg, prefix, suffix)

-- 
Best regards
ミハウ “𝓶𝓲𝓷𝓪86” ナザレヴイツ
«If at first you don’t succeed, give up skydiving»

  reply	other threads:[~2017-08-30 10:26 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-29 23:01 [PATCH] compiler: Don't perform compiletime_assert with -O0 Joe Stringer
2017-08-30 10:26 ` Michal Nazarewicz [this message]
2017-08-30 18:03   ` Joe Stringer
2017-08-30 22:59 ` Andrew Morton
2017-08-30 23:22   ` Joe Stringer
2017-08-31  2:16     ` Michael Ellerman
2017-08-31  6:52       ` Joe Stringer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xa1tr2vtfj17.fsf@mina86.com \
    --to=mina86@mina86.com \
    --cc=abbotti@mev.co.uk \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=joe@ovn.org \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.