From: Akim Demaille Date: Fri, 22 Mar 2019 07:25:53 +0000 (+0100) Subject: _Noreturn: beware of C's _Noreturn in C++ pre C++11 X-Git-Tag: v1.0~4998 X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=0d8714b7ced8e0e524014c57eb884a170d62cf43;p=gnulib.git _Noreturn: beware of C's _Noreturn in C++ pre C++11 * lib/_Noreturn.h, m4/gnulib-common.m4: Using C's _Noreturn in C++98 appears to be supported by Clang, but not by GCC nor ICC. --- diff --git a/ChangeLog b/ChangeLog index 58b47dcd1e..e87ff23894 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2019-03-22 Akim Demaille + + _Noreturn: beware of C's _Noreturn in C++ pre C++11. + * lib/_Noreturn.h, m4/gnulib-common.m4: Using C's _Noreturn in + C++98 appears to be supported by Clang, but not by GCC nor ICC. + 2019-03-23 Bruno Haible Support cross-compilation to musl libc. diff --git a/lib/_Noreturn.h b/lib/_Noreturn.h index 1629cef39b..7594e4b0c0 100644 --- a/lib/_Noreturn.h +++ b/lib/_Noreturn.h @@ -3,8 +3,9 @@ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER))) # define _Noreturn [[noreturn]] -# elif (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ - || 4 < __GNUC__ + (7 <= __GNUC_MINOR__)) +# elif ((!defined __cplusplus || defined __clang__) \ + && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || 4 < __GNUC__ + (7 <= __GNUC_MINOR__))) /* _Noreturn works as-is. */ # elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) diff --git a/m4/gnulib-common.m4 b/m4/gnulib-common.m4 index 8ad963e355..57b94ed532 100644 --- a/m4/gnulib-common.m4 +++ b/m4/gnulib-common.m4 @@ -21,8 +21,9 @@ AC_DEFUN([gl_COMMON_BODY], [ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER))) # define _Noreturn [[noreturn]] -# elif (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ - || 4 < __GNUC__ + (7 <= __GNUC_MINOR__)) +# elif ((!defined __cplusplus || defined __clang__) \ + && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ + || 4 < __GNUC__ + (7 <= __GNUC_MINOR__))) /* _Noreturn works as-is. */ # elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__))