Message ID | 20181107144516.4587-1-aryabinin@virtuozzo.com |
---|---|
State | New |
Headers | show |
Series | [v2] ubsan: don't mark __ubsan_handle_builtin_unreachable as noreturn | expand |
On Wed, Nov 7, 2018 at 6:45 AM Andrey Ryabinin <aryabinin@virtuozzo.com> wrote: > > From: Arnd Bergmann <arnd@arndb.de> > > gcc-8 complains about the prototype for this function: > > lib/ubsan.c:432:1: error: ignoring attribute 'noreturn' in declaration of a built-in function '__ubsan_handle_builtin_unreachable' because it conflicts with attribute 'const' [-Werror=attributes] > > This is actually a GCC's bug. In GCC internals > __ubsan_handle_builtin_unreachable() declared with both 'noreturn' and > 'const' attributes instead of only 'noreturn': > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84210 > > Workaround this by removing the noreturn attribute. > > [aryabinin: Add information about GCC bug in changelog] > Signed-off-by: Arnd Bergmann <arnd@arndb.de> > Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com> Acked-by: Olof Johansson <olof@lixom.net> While it's a GCC bug, it's there in official releases now and it makes warnings noisy so we'd rather silence it. -Olof
On Wed, 7 Nov 2018 17:45:16 +0300 Andrey Ryabinin <aryabinin@virtuozzo.com> wrote: > From: Arnd Bergmann <arnd@arndb.de> > > gcc-8 complains about the prototype for this function: > > lib/ubsan.c:432:1: error: ignoring attribute 'noreturn' in declaration of a built-in function '__ubsan_handle_builtin_unreachable' because it conflicts with attribute 'const' [-Werror=attributes] > > This is actually a GCC's bug. In GCC internals > __ubsan_handle_builtin_unreachable() declared with both 'noreturn' and > 'const' attributes instead of only 'noreturn': > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84210 > > Workaround this by removing the noreturn attribute. > > ... > > --- a/lib/ubsan.c > +++ b/lib/ubsan.c > @@ -427,8 +427,7 @@ void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data, > EXPORT_SYMBOL(__ubsan_handle_shift_out_of_bounds); > > > -void __noreturn > -__ubsan_handle_builtin_unreachable(struct unreachable_data *data) > +void __ubsan_handle_builtin_unreachable(struct unreachable_data *data) > { > unsigned long flags; This code has been here since 2016 and presumably people will want to build older kernels with newer gcc's. So I'll add cc:stable, OK?
On Wed, Nov 7, 2018 at 9:55 PM Andrew Morton <akpm@linux-foundation.org> wrote: > > On Wed, 7 Nov 2018 17:45:16 +0300 Andrey Ryabinin <aryabinin@virtuozzo.com> wrote: > > > From: Arnd Bergmann <arnd@arndb.de> > > --- a/lib/ubsan.c > > +++ b/lib/ubsan.c > > @@ -427,8 +427,7 @@ void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data, > > EXPORT_SYMBOL(__ubsan_handle_shift_out_of_bounds); > > > > > > -void __noreturn > > -__ubsan_handle_builtin_unreachable(struct unreachable_data *data) > > +void __ubsan_handle_builtin_unreachable(struct unreachable_data *data) > > { > > unsigned long flags; > > This code has been here since 2016 and presumably people will want to > build older kernels with newer gcc's. So I'll add cc:stable, OK? > Yes, sounds good. Thanks, arnd
diff --git a/lib/ubsan.c b/lib/ubsan.c index 59fee96c29a0..e4162f59a81c 100644 --- a/lib/ubsan.c +++ b/lib/ubsan.c @@ -427,8 +427,7 @@ void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data, EXPORT_SYMBOL(__ubsan_handle_shift_out_of_bounds); -void __noreturn -__ubsan_handle_builtin_unreachable(struct unreachable_data *data) +void __ubsan_handle_builtin_unreachable(struct unreachable_data *data) { unsigned long flags;