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`)? > @@ -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. > + > +#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