emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master d27d9a43d4: Update some commentary for C23


From: Paul Eggert
Subject: master d27d9a43d4: Update some commentary for C23
Date: Sat, 4 Feb 2023 18:58:49 -0500 (EST)

branch: master
commit d27d9a43d4d1b3f8a213cb739f4d27793158a050
Author: Paul Eggert <eggert@cs.ucla.edu>
Commit: Paul Eggert <eggert@cs.ucla.edu>

    Update some commentary for C23
---
 doc/lispref/internals.texi | 21 ++++++++++++---------
 src/floatfns.c             |  7 +++++--
 src/lisp.h                 |  7 ++++---
 src/xdisp.c                |  2 +-
 4 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/doc/lispref/internals.texi b/doc/lispref/internals.texi
index e1a4613875..deb1021283 100644
--- a/doc/lispref/internals.texi
+++ b/doc/lispref/internals.texi
@@ -732,14 +732,15 @@ Emacs session.
 @section C Dialect
 @cindex C programming language
 
-The C part of Emacs is portable to C99 or later: C11-specific features such
-as @samp{<stdalign.h>} and @samp{_Noreturn} are not used without a check,
+The C part of Emacs is portable to C99 or later: later C features such
+as @samp{<stdckdint.h>} and @samp{[[noreturn]]} are not used without a check,
 typically at configuration time, and the Emacs build procedure
-provides a substitute implementation if necessary.  Some C11 features,
+provides a substitute implementation if necessary.  Some later features,
 such as anonymous structures and unions, are too difficult to emulate,
 so they are avoided entirely.
 
-At some point in the future the base C dialect will no doubt change to C11.
+At some point in the future the base C dialect will no doubt change to
+something later than C99.
 
 @node Writing Emacs Primitives
 @section Writing Emacs Primitives
@@ -894,15 +895,17 @@ Currently, only the following attributes are recognized:
 @table @code
 @item noreturn
 Declares the C function as one that never returns.  This corresponds
-to the C11 keyword @code{_Noreturn} and to @w{@code{__attribute__
-((__noreturn__))}} attribute of GCC (@pxref{Function Attributes,,,
-gcc, Using the GNU Compiler Collection}).
+to C23's @code{[[noreturn]]}, to C11's @code{_Noreturn}, and to GCC's
+@w{@code{__attribute__ ((__noreturn__))}} (@pxref{Function
+Attributes,,, gcc, Using the GNU Compiler Collection}).  (Internally,
+Emacs's own C code uses @code{_Noreturn} as it can be defined as a
+macro on C platforms that do not support it.)
 
 @item const
 Declares that the function does not examine any values except its
 arguments, and has no effects except the return value.  This
-corresponds to @w{@code{__attribute__ ((__const__))}} attribute of
-GCC.
+corresponds to C23's @code{[[unsequenced]]} and to GCC's
+@w{@code{__attribute__ ((__const__))}}.
 
 @item noinline
 This corresponds to @w{@code{__attribute__ ((__noinline__))}}
diff --git a/src/floatfns.c b/src/floatfns.c
index 1d891ef3ce..13f0ca3e12 100644
--- a/src/floatfns.c
+++ b/src/floatfns.c
@@ -27,19 +27,22 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
    frexp, ldexp, log, log10 [via (log X 10)], *modf, pow, sin, *sinh,
    sqrt, tan, *tanh.
 
-   C99 and C11 require the following math.h functions in addition to
+   C99, C11 and C17 require the following math.h functions in addition to
    the C89 functions.  Of these, Emacs currently exports only the
    starred ones to Lisp, since we haven't found a use for the others.
    Also, it uses the ones marked "+" internally:
    acosh, atanh, cbrt, copysign (implemented by signbit), erf, erfc,
    exp2, expm1, fdim, fma, fmax, fmin, fpclassify, hypot, +ilogb,
-   isfinite, isgreater, isgreaterequal, isinf, isless, islessequal,
+   +isfinite, isgreater, isgreaterequal, +isinf, isless, islessequal,
    islessgreater, *isnan, isnormal, isunordered, lgamma, log1p, *log2
    [via (log X 2)], logb (approximately; implemented by frexp),
    +lrint/llrint, +lround/llround, nan, nearbyint, nextafter,
    nexttoward, remainder, remquo, *rint, round, scalbln, +scalbn,
    +signbit, tgamma, *trunc.
 
+   C23 requires many more math.h functions.  Emacs does not yet export
+   or use them.
+
    The C standard also requires functions for float and long double
    that are not listed above.  Of these functions, Emacs uses only the
    following internally: fabsf, powf, sprintf.
diff --git a/src/lisp.h b/src/lisp.h
index 196615effd..0bc400ba78 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -272,7 +272,7 @@ DEFINE_GDB_SYMBOL_END (VALMASK)
    emacs_align_type union in alloc.c.
 
    Although these macros are reasonably portable, they are not
-   guaranteed on non-GCC platforms, as C11 does not require support
+   guaranteed on non-GCC platforms, as the C standard does not require support
    for alignment to GCALIGNMENT and older compilers may ignore
    alignment requests.  For any type T where garbage collection
    requires alignment, use verify (GCALIGNED (T)) to verify the
@@ -2962,9 +2962,10 @@ XFLOAT_DATA (Lisp_Object f)
 /* Most hosts nowadays use IEEE floating point, so they use IEC 60559
    representations, have infinities and NaNs, and do not trap on
    exceptions.  Define IEEE_FLOATING_POINT to 1 if this host is one of the
-   typical ones.  The C11 macro __STDC_IEC_559__ is close to what is
+   typical ones.  The C23 macro __STDC_IEC_60559_BFP__ (or its
+   obsolescent C11 counterpart __STDC_IEC_559__) is close to what is
    wanted here, but is not quite right because Emacs does not require
-   all the features of C11 Annex F (and does not require C11 at all,
+   all the features of C23 Annex F (and does not require C11 or later,
    for that matter).  */
 
 #define IEEE_FLOATING_POINT (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \
diff --git a/src/xdisp.c b/src/xdisp.c
index 72d3bfa639..398056144a 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -12448,7 +12448,7 @@ display_echo_area (struct window *w)
      reset the echo_area_buffer in question to nil at the end because
      with_echo_area_buffer will set it to an empty buffer.  */
   bool i = display_last_displayed_message_p;
-  /* According to the C99, C11 and C++11 standards, the integral value
+  /* According to the C standard, the integral value
      of a "bool" is always 0 or 1, so this array access is safe here,
      if oddly typed. */
   no_message_p = NILP (echo_area_buffer[i]);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]