On Tue, Mar 08, 2022 at 12:57:20AM IST, Nick Desaulniers wrote: > Also, please cc me and the llvm mailing list on all changes to > include/linux/compiler-clang.h. I see now on lore there's further > patches here than just this single patch I was cc'ed on. > Mea culpa, sorry about that. > On Mon, Mar 7, 2022 at 11:25 AM Nick Desaulniers > <ndesaulniers@xxxxxxxxxx> wrote: > > > > On Fri, Mar 4, 2022 at 2:47 PM Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> wrote: > > > > > > From: Nathan Chancellor <nathan@xxxxxxxxxx> > > > > > > Add __diag macros similar to those in compiler-gcc.h, so that warnings > > > that need to be adjusted for specific cases but not globally can be > > > ignored when building with clang. > > > > > > Cc: Nathan Chancellor <nathan@xxxxxxxxxx> > > > Cc: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> > > > Cc: llvm@xxxxxxxxxxxxxxx > > > Signed-off-by: Nathan Chancellor <nathan@xxxxxxxxxx> > > > [ Kartikeya: wrote commit message ] > > > Signed-off-by: Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> > > > --- > > > include/linux/compiler-clang.h | 22 ++++++++++++++++++++++ > > > 1 file changed, 22 insertions(+) > > > > > > diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h > > > index 3c4de9b6c6e3..f1aa41d520bd 100644 > > > --- a/include/linux/compiler-clang.h > > > +++ b/include/linux/compiler-clang.h > > > > The equivalent functionality for GCC has > > 357 #ifndef __diag_GCC > > 358 #define __diag_GCC(version, severity, string) > > 359 #endif > > in include/linux/compiler_types.h. Should this patch as well? (at > > least #define __diag_clang`)? > > I left it out because there are no users for it, no code is doing __diag_ignore(clang, ...), all of the current ones are hardcoding e.g. __diag_ignore(GCC, 8, ...). > > > @@ -68,3 +68,25 @@ > > > > > > #define __nocfi __attribute__((__no_sanitize__("cfi"))) > > > #define __cficanonical __attribute__((__cfi_canonical_jump_table__)) > > > + > > > +/* > > > + * Turn individual warnings and errors on and off locally, depending > > > + * on version. > > > + */ > > > +#define __diag_clang(version, severity, s) \ > > > + __diag_clang_ ## version(__diag_clang_ ## severity s) > > > + > > > +/* Severity used in pragma directives */ > > > +#define __diag_clang_ignore ignored > > > +#define __diag_clang_warn warning > > > +#define __diag_clang_error error > > > > These severities match GCC. I wonder if rather than copy+pasting these > > over, we could rework __diag_ignore, __diag_warn, and __diag_error to > > not invoke a compiler-suffixed macro and rather pass the compiler > > along (or make it implicit since we know CONFIG_CC_IS_CLANG vs > > CONFIG_CC_IS_GCC)? We can probably land this than follow up on better > > code-reuse between compilers for diagnostics. > > That was the idea with __diag_ignore_all in the next patch. FYI this series has already been applied. > > > + > > > +#define __diag_str1(s) #s > > > +#define __diag_str(s) __diag_str1(s) > > > +#define __diag(s) _Pragma(__diag_str(clang diagnostic s)) > > > + > > > +#if CONFIG_CLANG_VERSION >= 110000 > > > +#define __diag_clang_11(s) __diag(s) > > > +#else > > > +#define __diag_clang_11(s) > > > +#endif > > > -- > > > 2.35.1 > > > > > > > > > -- > > Thanks, > > ~Nick Desaulniers > > > > -- > Thanks, > ~Nick Desaulniers -- Kartikeya