From 9d3f533586e07eba2c094501c83a22b561cc755c Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 19 Jan 2023 19:39:03 -0800 Subject: [PROPOSED] snippet/_Noreturn: work around Clang _Noreturn bug MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a bigger-hammer workaround for the clang _Noreturn issue fix for dfa.c on 2023-01-01. Unfortunately, it causes 270 -Wreturn-type and -Wsometimes-uninitialized warnings when building bleeding-edge GNU Emacs from Git on Fedora 37 with plain ‘./configure && make’. So the workaround is enabled only if you compile with -D_GL_WORK_AROUND_LLVM_BUG_59792. * lib/_Noreturn.h (_Noreturn): * m4/gnulib-common.m4 (gl_COMMON_BODY): #define _Noreturn to be empty if it is Clang 15 or earlier, and if _GL_WORK_AROUND_LLVM_BUG_59792 is defined. --- ChangeLog | 14 ++++++++++++++ lib/_Noreturn.h | 5 +++++ m4/gnulib-common.m4 | 5 +++++ 3 files changed, 24 insertions(+) diff --git a/ChangeLog b/ChangeLog index ddd9e2b1aa..5d0c8f7cd7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2023-01-19 Paul Eggert + + snippet/_Noreturn: work around Clang _Noreturn bug + This is a bigger-hammer workaround for the clang _Noreturn issue + fix for dfa.c on 2023-01-01. Unfortunately, it causes 270 + -Wreturn-type and -Wsometimes-uninitialized warnings when building + bleeding-edge GNU Emacs from Git on Fedora 37 with plain + ‘./configure && make’. So the workaround is enabled only if you + compile with -D_GL_WORK_AROUND_LLVM_BUG_59792. + * lib/_Noreturn.h (_Noreturn): + * m4/gnulib-common.m4 (gl_COMMON_BODY): + #define _Noreturn to be empty if it is Clang 15 or earlier, + and if _GL_WORK_AROUND_LLVM_BUG_59792 is defined. + 2023-01-19 Bruno Haible Fix warnings for functions introduced in Android API level 34. diff --git a/lib/_Noreturn.h b/lib/_Noreturn.h index fa15b1b25e..6ecea98b54 100644 --- a/lib/_Noreturn.h +++ b/lib/_Noreturn.h @@ -26,6 +26,11 @@ AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] +# elif (defined __clang__ && __clang_major__ < 16 \ + && defined _GL_WORK_AROUND_LLVM_BUG_59792) + /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around + that rare LLVM bug, though you may get many false-alarm warnings. */ +# define _Noreturn # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ diff --git a/m4/gnulib-common.m4 b/m4/gnulib-common.m4 index 2db3376b01..fa814222ce 100644 --- a/m4/gnulib-common.m4 +++ b/m4/gnulib-common.m4 @@ -38,6 +38,11 @@ AC_DEFUN([gl_COMMON_BODY], [ AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] +# elif (defined __clang__ && __clang_major__ < 16 \ + && defined _GL_WORK_AROUND_LLVM_BUG_59792) + /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around + that rare LLVM bug, though you may get many false-alarm warnings. */ +# define _Noreturn # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ -- 2.39.0