diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2022-12-24 01:29:29 -0800 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2022-12-24 01:34:31 -0800 |
commit | c28598c37d2520641dc9e51841cf65eff6df68fa (patch) | |
tree | 20090312b502f24e71e81695687e0e4aaa708275 | |
parent | ea26437be087a9a07c2505015c0c4a7531e578f5 (diff) | |
download | gnulib-c28598c37d2520641dc9e51841cf65eff6df68fa.tar.gz |
stdnoreturn: deprecate
C23 says <stdnoreturn.h> 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.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | doc/noreturn.texi | 35 | ||||
-rw-r--r-- | doc/posix-headers/stdnoreturn.texi | 2 | ||||
-rw-r--r-- | lib/stdnoreturn.in.h | 4 | ||||
-rw-r--r-- | modules/stdnoreturn | 6 |
6 files changed, 38 insertions, 20 deletions
@@ -1,3 +1,11 @@ +2022-12-24 Paul Eggert <eggert@cs.ucla.edu> + + stdnoreturn: deprecate + C23 says <stdnoreturn.h> 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 <eggert@cs.ucla.edu> file-has-acl: improve recent NFSv4 support @@ -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{<config.h>} 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{<noreturn.h>}. - -@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{<stdnoreturn.h>}. @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{<stdnoreturn.h>} and the @code{noreturn} macro are obsolescent in C23. +@item @code{<stdnoreturn.h>} 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 <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf>) - section 7.23 */ + section 7.23 + + <stdnoreturn.h> 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 <stdnoreturn.h> that nearly conforms to ISO C11. +Status: +obsolete + +Notice: +This module is obsolete. + Files: lib/stdnoreturn.in.h m4/stdnoreturn.m4 |