Re: [PATCH v2] ubsan: don't mark __ubsan_handle_builtin_unreachable as noreturn

From: Andrew Morton
Date: Wed Nov 07 2018 - 15:55:22 EST


On Wed, 7 Nov 2018 17:45:16 +0300 Andrey Ryabinin <aryabinin@xxxxxxxxxxxxx> wrote:

> From: Arnd Bergmann <arnd@xxxxxxxx>
>
> 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?