Looking at the online Clang manuals, it appears that Clang started
supporting _Noreturn starting with 3.5.0. So does the attached
(untested) patch work for you? If not, please advise.
>From 14f1146b2261ffeaacd5bc74cf034db52232bc52 Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
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 <egg...@cs.ucla.edu>
+
+ 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 <br...@clisp.org>
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