From 14f1146b2261ffeaacd5bc74cf034db52232bc52 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 3 Feb 2020 13:20:09 -0800 Subject: [PATCH] Port _Noreturn to older Clang Problem reported by Jeffery Walton in: https://lists.gnu.org/r/bug-gnulib/2020-02/msg00013.html * lib/_Noreturn.h (_Noreturn): * m4/gnulib-common.m4 (gl_COMMON_BODY): Assume _Noreturn works in Clang 3.5 and later. It is documented to work in Clang 3.5: http://releases.llvm.org/3.5.0/tools/clang/docs/AttributeReference.html and is not documented in Clang 3.4: https://releases.llvm.org/3.4/tools/clang/docs/LanguageExtensions.html --- ChangeLog | 13 +++++++++++++ lib/_Noreturn.h | 3 ++- m4/gnulib-common.m4 | 5 +++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2a86791a8..4cfd9d445 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2020-02-03 Paul Eggert + + Port _Noreturn to older Clang + Problem reported by Jeffery Walton in: + https://lists.gnu.org/r/bug-gnulib/2020-02/msg00013.html + * lib/_Noreturn.h (_Noreturn): + * m4/gnulib-common.m4 (gl_COMMON_BODY): + Assume _Noreturn works in Clang 3.5 and later. + It is documented to work in Clang 3.5: + http://releases.llvm.org/3.5.0/tools/clang/docs/AttributeReference.html + and is not documented in Clang 3.4: + https://releases.llvm.org/3.4/tools/clang/docs/LanguageExtensions.html + 2020-02-02 Bruno Haible Document the new modules list-c++, set-c++, oset-c++, map-c++, omap-c++. diff --git a/lib/_Noreturn.h b/lib/_Noreturn.h index 74ee9ad41..f87eb77a5 100644 --- a/lib/_Noreturn.h +++ b/lib/_Noreturn.h @@ -28,7 +28,8 @@ # define _Noreturn [[noreturn]] # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ - || 4 < __GNUC__ + (7 <= __GNUC_MINOR__))) + || 4 < __GNUC__ + (7 <= __GNUC_MINOR__) \ + || 3 < __clang_major__ + (5 <= __clang_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 276ed1aff..78dd45fe4 100644 --- a/m4/gnulib-common.m4 +++ b/m4/gnulib-common.m4 @@ -1,4 +1,4 @@ -# gnulib-common.m4 serial 47 +# gnulib-common.m4 serial 48 dnl Copyright (C) 2007-2020 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -31,7 +31,8 @@ AC_DEFUN([gl_COMMON_BODY], [ # define _Noreturn [[noreturn]] # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ - || 4 < __GNUC__ + (7 <= __GNUC_MINOR__))) + || 4 < __GNUC__ + (7 <= __GNUC_MINOR__) \ + || 3 < __clang_major__ + (5 <= __clang_minor__))) /* _Noreturn works as-is. */ # elif 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) -- 2.24.1