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

Reply via email to