On Mon, Jul 30, 2018 at 02:34:12PM -0700, Nick Desaulniers wrote: > Starting with Clang-7.0, _THIS_IP_ generates -Wreturn-stack-address > warnings for almost every translation unit. In general, I'd prefer to > leave this on (returning the address of a stack allocated variable is in > general a bad idea) and disable it only at whitelisted call sites. > > We can't do something like: > #pragma clang diagnostic push > #pragma clang diagnostic ignored "-Wreturn-stack-address" > <code> > #pragma clang diagnostic pop > > in a GNU Statement Expression or macro, hence we use _Pragma, which is > its raison d'être: https://gcc.gnu.org/onlinedocs/cpp/Pragmas.html > > We also can't use compiler specific pragma's without triggering > -Werror=unknown-pragmas in other compilers, so use __diag. > > Cc: stable@xxxxxxxxxxxxxxx # 4.17, 4.14, 4.9, 4.4 > Suggested-by: Nathan Chancellor <natechancellor@xxxxxxxxx> > Signed-off-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> Tested-and-reviewed-by: Nathan Chancellor <natechancellor@xxxxxxxxx> > --- > include/linux/kernel.h | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/include/linux/kernel.h b/include/linux/kernel.h > index 941dc0a5a877..909bb771c0ca 100644 > --- a/include/linux/kernel.h > +++ b/include/linux/kernel.h > @@ -168,7 +168,15 @@ > > > #define _RET_IP_ (unsigned long)__builtin_return_address(0) > -#define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) > +#define _THIS_IP_ ( \ > +{ \ > + __label__ __here; \ > + __diag_push() \ > + __diag_ignore(CLANG, 7, "-Wreturn-stack-address", "") \ > +__here: (unsigned long)&&__here; \ > + __diag_pop() \ > +} \ > +) > > #ifdef CONFIG_LBDAF > # include <asm/div64.h> > -- > 2.18.0.345.g5c9ce644c3-goog >