diff mbox series

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

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

Commit Message

Andrey Ryabinin Nov. 7, 2018, 2:45 p.m. UTC
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>

---
 lib/ubsan.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

-- 
2.18.1

Comments

Olof Johansson Nov. 7, 2018, 4:23 p.m. UTC | #1
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
Andrew Morton Nov. 7, 2018, 8:55 p.m. UTC | #2
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?
Arnd Bergmann Nov. 7, 2018, 9:44 p.m. UTC | #3
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 mbox series

Patch

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;