From: Paul Eggert <eggert@cs.ucla.edu>
To: bug-gnulib@gnu.org
Cc: Paul Eggert <eggert@cs.ucla.edu>
Subject: [PATCH] stdnoreturn: deprecate
Date: Tue, 27 Dec 2022 10:59:57 -0800 [thread overview]
Message-ID: <20221227190002.5660-3-eggert@cs.ucla.edu> (raw)
In-Reply-To: <20221227190002.5660-1-eggert@cs.ucla.edu>
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.
---
ChangeLog | 8 +++++++
NEWS | 3 +++
doc/noreturn.texi | 35 ++++++++++++++----------------
| 2 ++
lib/stdnoreturn.in.h | 4 +++-
modules/stdnoreturn | 6 +++++
6 files changed, 38 insertions(+), 20 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 3b6c6cf98e..91370af964 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
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{<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.
--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
--
2.25.1
next prev parent reply other threads:[~2022-12-27 19:00 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-27 18:59 [PATCH 0/6] build-aux/bootstrap that doesn't need to replace itself Paul Eggert
2022-12-27 18:59 ` [PATCH 1/6] Move scriptversion= lines up in scripts Paul Eggert
2022-12-27 18:59 ` Paul Eggert [this message]
2022-12-27 18:59 ` [PATCH 2/6] Make autogen a shell function too Paul Eggert
2022-12-27 18:59 ` [PATCH 3/6] Make autopull " Paul Eggert
2022-12-27 19:00 ` [PATCH 4/6] Bootstrap with functions, not scripts Paul Eggert
2022-12-27 19:00 ` [PATCH 5/6] Support packages with just 'bootstrap' Paul Eggert
2022-12-27 19:00 ` [PATCH 6/6] Add --pull, --gen options to build-aux/bootstrap Paul Eggert
2022-12-27 21:09 ` [PATCH 0/6] build-aux/bootstrap that doesn't need to replace itself Bruno Haible
2022-12-28 2:16 ` Paul Eggert
-- strict thread matches above, loose matches on Subject: below --
2022-12-24 9:35 [PATCH] stdnoreturn: deprecate Paul Eggert
2022-12-27 10:14 ` Bruno Haible
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://lists.gnu.org/mailman/listinfo/bug-gnulib
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221227190002.5660-3-eggert@cs.ucla.edu \
--to=eggert@cs.ucla.edu \
--cc=bug-gnulib@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).