From 57b2d6dbd8cfefcaf5dc0431b0603ed1dae89dac Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Wed, 9 Feb 2022 18:49:16 -0800 Subject: [PATCH] [libc] Fix noreturn c++ compatibility Stop using bare "noreturn" with library functions, and use the more cross-compatible "_Noreturn" instead. --- src/libraries/libc/__j6libc/assert_fail.cpp | 2 +- src/libraries/libc/assert.h | 2 +- src/libraries/libc/stdnoreturn.h | 6 ++---- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/libraries/libc/__j6libc/assert_fail.cpp b/src/libraries/libc/__j6libc/assert_fail.cpp index 66e50e3..2b35a53 100644 --- a/src/libraries/libc/__j6libc/assert_fail.cpp +++ b/src/libraries/libc/__j6libc/assert_fail.cpp @@ -1,7 +1,7 @@ #include #include -noreturn void +void __assert_fail( const char *, const char *, unsigned, const char * ) { // TODO: display message diff --git a/src/libraries/libc/assert.h b/src/libraries/libc/assert.h index 0376e98..ad35491 100644 --- a/src/libraries/libc/assert.h +++ b/src/libraries/libc/assert.h @@ -20,7 +20,7 @@ extern "C" { #define assert( argument ) ( (void) 0 ) #else -noreturn void __assert_fail( const char *, const char *, unsigned, const char * ); +_Noreturn void __assert_fail( const char *, const char *, unsigned, const char * ); #define assert( argument ) \ do { if (!(argument)) { __assert_fail( #argument, __FILE__, __LINE__, __func__ ); }} while(0) diff --git a/src/libraries/libc/stdnoreturn.h b/src/libraries/libc/stdnoreturn.h index ecd2db1..fcafad4 100644 --- a/src/libraries/libc/stdnoreturn.h +++ b/src/libraries/libc/stdnoreturn.h @@ -10,10 +10,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -#ifdef __cplusplus -#define noreturn [[noreturn]] -#elif __STDC_VERSION__ >= 201103L +#if !defined(__cplusplus) && __STDC_VERSION__ >= 201103L #define noreturn _Noreturn -#else +#elif !defined(__cplusplus) #define noreturn #endif