From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Nathan Chancellor <nathan@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Kees Cook <kees@kernel.org>, Petr Mladek <pmladek@suse.com>,
Sergey Senozhatsky <senozhatsky@chromium.org>,
Steven Rostedt <rostedt@goodmis.org>,
John Ogness <john.ogness@linutronix.de>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
Peter Zijlstra <peterz@infradead.org>,
linux-kernel@vger.kernel.org
Subject: Re: [GIT PULL] more printk for 6.15
Date: Thu, 3 Apr 2025 15:07:09 +0300 [thread overview]
Message-ID: <Z-557YrwVr8bONq4@smile.fi.intel.com> (raw)
In-Reply-To: <20250402203422.GA655609@ax162>
On Wed, Apr 02, 2025 at 01:34:22PM -0700, Nathan Chancellor wrote:
> On Wed, Apr 02, 2025 at 10:25:46PM +0300, Andy Shevchenko wrote:
> > +Cc: Kees and Nathan (I believe this discussion has some material for
> > you, folks, to think of / comment on / etc)
>
> Thanks, I have commented on the part of the message that seem relevant
> for me.
Thank you!
> > On Wed, Apr 2, 2025 at 10:06 PM Linus Torvalds
> > <torvalds@linux-foundation.org> wrote:
> > > On Wed, 2 Apr 2025 at 11:39, Andy Shevchenko <andy.shevchenko@gmail.com> wrote:
> > > >
> > > > Yes. Clang complains on unknown pragma.
> > >
> > > What a crock.
> > >
> > > It says GCC, for chrissake!
> > >
> > > And clang clearly doesn't complain about
> > >
> > > > +#pragma GCC diagnostic push
> > > > +#pragma GCC diagnostic pop
> > >
> > > which are *not* protected by that #ifndef __clang__ thing.
> > >
> > > So this smells like a clang bug to me.
>
> Yes, clang implements support for '#pragma GCC' for compatability with
> existing source code:
>
> https://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-via-pragmas
>
> Otherwise, the pragma would need to be duplicated if the warning was
> shared between the compilers (as many are nowadays).
>
> It complains specifically about an unknown warning being passed to
> 'diagnostic ignored':
>
> lib/vsprintf.c:1703:32: error: unknown warning group '-Wsuggest-attribute=format', ignored [-Werror,-Wunknown-warning-option]
> 1703 | #pragma GCC diagnostic ignored "-Wsuggest-attribute=format"
> | ^
> 1 error generated.
>
> Which I suppose you could argue is a bug since it is a GCC pragma,
> although warning on an unknown option to the ignored diagnostic pragma
> is what GCC does as well (it just ignores '#pragma clang' altogether):
>
> $ echo '#pragma GCC diagnostic ignored "-Wfoo"' | gcc -fsyntax-only -x c -
> <stdin>:1:32: warning: unknown option after ‘#pragma GCC diagnostic’ kind [-Wpragmas]
>
> I can look into filing a report upstream about this, however...
>
> > > Can we please use wrapper defines instead so that we don't have that
> > > #ifndef in the middle of code? And since those don't work with
> > > '#pragma', they need to use the _Pragma() operator instead.
> > >
> > > Something like
> > >
> > > #define GCC_PRAGMA(x) _Pragma(#x)
> > >
> > > in compiler-gcc.h, and then add a
> > >
> > > #ifndef GCC_PRAGMA
> > > #define GCC_PRAGMA(x) /* Nothing */
> > > #endif
> > >
> > > and then you can just do
> > >
> > > GCC_PRAGMA(Wsuggest-attribute=format)
> > >
> > > in places like this?
> > >
> > > (Entirely untested: I *despise* pragma in general).
>
> We have the __diag() infrastructure for this already. I think this issue
> would be as simple as the following diff, which makes clang and GCC
> happy without any obvious ifdeffery.
FWIW, I have tested this in my case for both compilers and they are happy with it.
Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> diff --git a/include/linux/compiler-igcc.h b/include/linux/compiler-gcc.h
> index 32048052c64a..5d07c469b571 100644
> --- a/include/linux/compiler-gcc.h
> +++ b/include/linux/compiler-gcc.h
> @@ -127,6 +127,8 @@
> #define __diag_GCC_8(s)
> #endif
>
> +#define __diag_GCC_all(s) __diag(s)
> +
> #define __diag_ignore_all(option, comment) \
> __diag(__diag_GCC_ignore option)
>
> diff --git a/lib/vsprintf.c b/lib/vsprintf.c
> index 01699852f30c..6ff4d85e144e 100644
> --- a/lib/vsprintf.c
> +++ b/lib/vsprintf.c
> @@ -1699,10 +1699,8 @@ char *escaped_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
> return buf;
> }
>
> -#pragma GCC diagnostic push
> -#ifndef __clang__
> -#pragma GCC diagnostic ignored "-Wsuggest-attribute=format"
> -#endif
> +__diag_push();
> +__diag_ignore(GCC, all, "-Wsuggest-attribute=format", "<reason>");
> static char *va_format(char *buf, char *end, struct va_format *va_fmt,
> struct printf_spec spec)
> {
> @@ -1717,7 +1715,7 @@ static char *va_format(char *buf, char *end, struct va_format *va_fmt,
>
> return buf;
> }
> -#pragma GCC diagnostic pop
> +__diag_pop();
>
> static noinline_for_stack
> char *uuid_string(char *buf, char *end, const u8 *addr,
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2025-04-03 12:07 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-02 12:58 [GIT PULL] more printk for 6.15 Petr Mladek
2025-04-02 17:12 ` Linus Torvalds
2025-04-02 18:39 ` Andy Shevchenko
2025-04-02 19:06 ` Linus Torvalds
2025-04-02 19:25 ` Andy Shevchenko
2025-04-02 20:34 ` Nathan Chancellor
2025-04-03 12:07 ` Andy Shevchenko [this message]
2025-04-04 8:19 ` Petr Mladek
2025-04-04 21:02 ` Nathan Chancellor
2025-04-03 16:14 ` Kees Cook
2025-04-02 19:07 ` Linus Torvalds
2025-04-02 19:10 ` Linus Torvalds
2025-04-02 19:44 ` Steven Rostedt
2025-04-02 19:52 ` Linus Torvalds
2025-04-02 20:25 ` Andy Shevchenko
2025-04-02 20:00 ` Sean Christopherson
2025-04-02 20:11 ` Steven Rostedt
2025-04-03 9:34 ` Petr Mladek
2025-04-02 17:48 ` pr-tracker-bot
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=Z-557YrwVr8bONq4@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=john.ogness@linutronix.de \
--cc=kees@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=nathan@kernel.org \
--cc=peterz@infradead.org \
--cc=pmladek@suse.com \
--cc=rostedt@goodmis.org \
--cc=senozhatsky@chromium.org \
--cc=torvalds@linux-foundation.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.