From: Paul Eggert Date: Sat, 24 Dec 2022 09:29:29 +0000 (-0800) Subject: stdnoreturn: deprecate X-Git-Tag: v1.0~1933 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c28598c37d2520641dc9e51841cf65eff6df68fa;p=thirdparty%2Fgnulib.git stdnoreturn: deprecate C23 says is obsolescent, so deprecate the stdnoreturn module. I don't think it was being used anyway as it had too many problems. * modules/stdnoreturn: Mark as obsolete. --- diff --git a/ChangeLog b/ChangeLog index 3b6c6cf98e..91370af964 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2022-12-24 Paul Eggert + + stdnoreturn: deprecate + C23 says is obsolescent, so deprecate the + stdnoreturn module. I don't think it was being used anyway + as it had too many problems. + * modules/stdnoreturn: Mark as obsolete. + 2022-12-23 Paul Eggert file-has-acl: improve recent NFSv4 support diff --git a/NEWS b/NEWS index bc620ce86a..dd2374c4fd 100644 --- a/NEWS +++ b/NEWS @@ -74,6 +74,9 @@ User visible incompatible changes Date Modules Changes +2022-12-24 stdnoreturn This module is deprecated. Use _Noreturn + or the noreturn module instead. + 2022-12-21 ctime This module is deprecated. Use localtime_r and strftime (or even sprintf) instead. diff --git a/doc/noreturn.texi b/doc/noreturn.texi index a3a394409c..ad0a286f4a 100644 --- a/doc/noreturn.texi +++ b/doc/noreturn.texi @@ -15,22 +15,26 @@ @cindex @code{noreturn} @cindex @code{stdnoreturn} A "non-returning" function is a function which cannot return normally. -It can transfer control only through @code{longjmp()}, @code{throw} -(in C++), or similar mechanisms. The most prominent function of this -class is the @code{abort} function. Non-returning functions are +Instead of returning, it can loop forever, or it can transfer control via +@code{abort}, @code{execvp}, @code{exit}, @code{longjmp}, @code{throw} +(in C++), or similar mechanisms. Non-returning functions are declared with a @code{void} return type. It helps the compiler's ability to emit sensible warnings, following data-flow analysis, to declare which functions are non-returning. +It can also help generate more-efficient code, as there is no need +to save a return address when calling a non-returning function. -To decorate function declarations and function definitions, you can -use the @code{_Noreturn} keyword. No modules are needed, as Gnulib +Gnulib has multiple ways to support such a declaration'' + +@itemize @bullet +@item +The @code{_Noreturn} keyword. No modules are needed, as Gnulib arranges for @code{} to define @code{_Noreturn} to an appropriate replacement on platforms lacking it. +Unfortunately, although this approach works for all current C versions, +the @code{_Noreturn} keyword is obsolescent in C23. -Gnulib has two modules that support such a declaration: - -@itemize @bullet @item The @samp{noreturn} module. It provides a way to put this declaration at function declarations, at function definitions, and in function @@ -44,20 +48,13 @@ definitions. @end itemize @noindent The include file is @code{}. - -@item -The @samp{stdnoreturn} module. This can improve readability by -letting you use @code{noreturn} instead of @code{_Noreturn}; -unfortunately, @code{noreturn} is a no-op on some platforms even -though @code{_Noreturn} works on them. The include file is -@code{}. @end itemize -Which of the two modules to use? If the non-returning functions you +Which of the approaches to use? If the non-returning functions you have to declare are unlikely to be accessed through function pointers, -you should use module @code{stdnoreturn}; otherwise the module +you should use @code{_Noreturn}; otherwise the module @code{noreturn} provides for better data-flow analysis and thus for better warnings. -For a detailed description of the @code{stdnoreturn} module, see -@ref{stdnoreturn.h}. +There is also an obsolete @code{stdnoreturn} module, but its use is no +longer recommended. diff --git a/doc/posix-headers/stdnoreturn.texi b/doc/posix-headers/stdnoreturn.texi index 3e1c5882db..ebe31ffc9f 100644 --- a/doc/posix-headers/stdnoreturn.texi +++ b/doc/posix-headers/stdnoreturn.texi @@ -22,6 +22,8 @@ MSVC/clang. Portability problems not fixed by Gnulib: @itemize @item +@code{} and the @code{noreturn} macro are obsolescent in C23. +@item @code{} cannot be #included in C++ mode on some platforms: FreeBSD 13.1. @item diff --git a/lib/stdnoreturn.in.h b/lib/stdnoreturn.in.h index d9e746699d..446e11b0b2 100644 --- a/lib/stdnoreturn.in.h +++ b/lib/stdnoreturn.in.h @@ -24,7 +24,9 @@ References: ISO C11 (latest free draft ) - section 7.23 */ + section 7.23 + + is obsolescent in C23, so new code should avoid it. */ /* The definition of _Noreturn is copied here. */ diff --git a/modules/stdnoreturn b/modules/stdnoreturn index 1ef894d51f..ce6b04a35e 100644 --- a/modules/stdnoreturn +++ b/modules/stdnoreturn @@ -1,6 +1,12 @@ Description: A that nearly conforms to ISO C11. +Status: +obsolete + +Notice: +This module is obsolete. + Files: lib/stdnoreturn.in.h m4/stdnoreturn.m4