texinfo-commits
[Top][All Lists]
Advanced

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

branch master updated: Update gnulib


From: Gavin D. Smith
Subject: branch master updated: Update gnulib
Date: Wed, 20 Sep 2023 13:35:32 -0400

This is an automated email from the git hooks/post-receive script.

gavin pushed a commit to branch master
in repository texinfo.

The following commit(s) were added to refs/heads/master by this push:
     new 86f5105ae8 Update gnulib
86f5105ae8 is described below

commit 86f5105ae8f36db53a74a469ba03c0265c9ad069
Author: Gavin Smith <gavinsmith0123@gmail.com>
AuthorDate: Wed Sep 20 18:35:23 2023 +0100

    Update gnulib
    
    * (top-level): Run "gnulib-tool --add-import"
    * tp/Texinfo/XS: Run "gnulib-tool --add-import".
    
    A gnulib update needed at top level to fix compilation on
    AIX 7.3.1.  Report from Bruno Haible.
---
 ChangeLog                                    |  10 +
 gnulib/lib/Makefile.am                       |  24 +++
 gnulib/lib/attribute.h                       |   2 +
 gnulib/lib/error.in.h                        |  13 +-
 gnulib/lib/getopt-cdefs.in.h                 |   6 +-
 gnulib/lib/intprops-internal.h               |   5 +
 gnulib/lib/iswpunct.c                        |  33 +++
 gnulib/lib/mbrtoc32.c                        |   8 +
 gnulib/lib/mbscasecmp.c                      |  68 +++---
 gnulib/lib/mbslen.c                          |  11 +-
 gnulib/lib/mbsncasecmp.c                     |  45 ++--
 gnulib/lib/mbsstr.c                          | 150 ++++++++++++-
 gnulib/lib/mbtowc-lock.c                     |  14 +-
 gnulib/lib/nl_langinfo-lock.c                |  14 +-
 gnulib/lib/setlocale-lock.c                  |  14 +-
 gnulib/lib/stddef.in.h                       |  28 ++-
 gnulib/lib/stdio.in.h                        |  41 +++-
 gnulib/lib/stdlib.in.h                       | 109 +++++++++-
 gnulib/lib/string.in.h                       | 111 ++++++++--
 gnulib/lib/sys_stat.in.h                     |  30 ++-
 gnulib/lib/uchar.in.h                        | 162 +++++++++++---
 gnulib/lib/verify.h                          |  10 +-
 gnulib/lib/wchar.in.h                        |  52 ++++-
 gnulib/lib/wctype.in.h                       |  12 +-
 gnulib/lib/xalloc-oversized.h                |   8 +-
 gnulib/m4/absolute-header.m4                 |   4 +-
 gnulib/m4/btowc.m4                           |  43 ++--
 gnulib/m4/calloc.m4                          |   4 +-
 gnulib/m4/clock_time.m4                      |   4 +-
 gnulib/m4/dup2.m4                            |   4 +-
 gnulib/m4/fcntl-o.m4                         |   8 +-
 gnulib/m4/float_h.m4                         |  10 +-
 gnulib/m4/fstat.m4                           |   4 +-
 gnulib/m4/getopt.m4                          |   6 +-
 gnulib/m4/getrandom.m4                       |   4 +-
 gnulib/m4/gnulib-common.m4                   |  22 +-
 gnulib/m4/gnulib-comp.m4                     |  24 ++-
 gnulib/m4/iswdigit.m4                        |   4 +-
 gnulib/m4/iswpunct.m4                        |  47 ++++
 gnulib/m4/iswxdigit.m4                       |   4 +-
 gnulib/m4/largefile.m4                       |   4 +-
 gnulib/m4/lib-ld.m4                          |   4 +-
 gnulib/m4/locale-fr.m4                       |   6 +-
 gnulib/m4/locale-ja.m4                       |   4 +-
 gnulib/m4/locale-zh.m4                       |   4 +-
 gnulib/m4/locale_h.m4                        |   9 +-
 gnulib/m4/localeconv.m4                      |   4 +-
 gnulib/m4/lstat.m4                           |   4 +-
 gnulib/m4/malloc.m4                          |   6 +-
 gnulib/m4/math_h.m4                          |   4 +-
 gnulib/m4/mbrtoc32.m4                        |  24 +--
 gnulib/m4/mbrtowc.m4                         |  36 ++--
 gnulib/m4/mbsinit.m4                         |   4 +-
 gnulib/m4/memchr.m4                          |  14 +-
 gnulib/m4/mkdir.m4                           |  52 ++---
 gnulib/m4/mkstemp.m4                         |   4 +-
 gnulib/m4/open.m4                            |   4 +-
 gnulib/m4/printf.m4                          | 310 ++++++++++++++-------------
 gnulib/m4/pthread_rwlock_rdlock.m4           |   4 +-
 gnulib/m4/realloc.m4                         |   4 +-
 gnulib/m4/regex.m4                           |  10 +-
 gnulib/m4/setlocale_null.m4                  |  14 +-
 gnulib/m4/stat.m4                            |   6 +-
 gnulib/m4/stdalign.m4                        | 206 ++++++++++++++++++
 gnulib/m4/stdint.m4                          |  15 +-
 gnulib/m4/strerror.m4                        |   4 +-
 gnulib/m4/threadlib.m4                       |  10 +-
 gnulib/m4/wcrtomb.m4                         |   8 +-
 gnulib/m4/wctype.m4                          |  18 +-
 gnulib/m4/wctype_h.m4                        |   4 +-
 tp/Texinfo/XS/gnulib/lib/Makefile.am         |   2 +
 tp/Texinfo/XS/gnulib/lib/attribute.h         |   2 +
 tp/Texinfo/XS/gnulib/lib/intprops-internal.h |   5 +
 tp/Texinfo/XS/gnulib/lib/stddef.in.h         |  26 ++-
 tp/Texinfo/XS/gnulib/lib/stdio.in.h          |  41 +++-
 tp/Texinfo/XS/gnulib/lib/stdlib.in.h         | 109 +++++++++-
 tp/Texinfo/XS/gnulib/lib/string.in.h         | 111 ++++++++--
 tp/Texinfo/XS/gnulib/lib/verify.h            |  10 +-
 tp/Texinfo/XS/gnulib/lib/wchar.in.h          |  52 ++++-
 tp/Texinfo/XS/gnulib/lib/wctype.in.h         |  12 +-
 tp/Texinfo/XS/gnulib/lib/xalloc-oversized.h  |   8 +-
 tp/Texinfo/XS/gnulib/m4/gnulib-common.m4     |  22 +-
 tp/Texinfo/XS/gnulib/m4/wctype_h.m4          |   4 +-
 83 files changed, 1842 insertions(+), 534 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index f20bb230fc..0b37f0cfac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2023-09-20  Gavin Smith <gavinsmith0123@gmail.com>
+
+       Update gnulib
+
+       * (top-level): Run "gnulib-tool --add-import"
+       * tp/Texinfo/XS: Run "gnulib-tool --add-import".
+
+       A gnulib update needed at top level to fix compilation on
+       AIX 7.3.1.  Report from Bruno Haible.
+
 2023-09-19  Gavin Smith <gavinsmith0123@gmail.com>
 
        * doc/texinfo-tex-test.texi (TOC display): Add new example of
diff --git a/gnulib/lib/Makefile.am b/gnulib/lib/Makefile.am
index f1880cb77b..8984cd3f30 100644
--- a/gnulib/lib/Makefile.am
+++ b/gnulib/lib/Makefile.am
@@ -812,6 +812,14 @@ endif
 
 ## end   gnulib module iswdigit
 
+## begin gnulib module iswpunct
+
+if GL_COND_OBJ_ISWPUNCT
+libgnu_a_SOURCES += iswpunct.c
+endif
+
+## end   gnulib module iswpunct
+
 ## begin gnulib module iswxdigit
 
 if GL_COND_OBJ_ISWXDIGIT
@@ -2288,6 +2296,7 @@ uchar.h: uchar.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H)
              -e 
's|@''GNULIBHEADERS_OVERRIDE_CHAR16_T''@|$(GNULIBHEADERS_OVERRIDE_CHAR16_T)|g' \
              -e 
's|@''GNULIBHEADERS_OVERRIDE_CHAR32_T''@|$(GNULIBHEADERS_OVERRIDE_CHAR32_T)|g' \
              -e 's/@''GNULIB_BTOC32''@/$(GL_GNULIB_BTOC32)/g' \
+             -e 's/@''GNULIB_BTOWC''@/$(GL_GNULIB_BTOWC)/g' \
              -e 's/@''GNULIB_C32ISALNUM''@/$(GL_GNULIB_C32ISALNUM)/g' \
              -e 's/@''GNULIB_C32ISALPHA''@/$(GL_GNULIB_C32ISALPHA)/g' \
              -e 's/@''GNULIB_C32ISBLANK''@/$(GL_GNULIB_C32ISBLANK)/g' \
@@ -2313,11 +2322,24 @@ uchar.h: uchar.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H)
              -e 
's/@''GNULIB_C32_APPLY_TYPE_TEST''@/$(GL_GNULIB_C32_APPLY_TYPE_TEST)/g' \
              -e 
's/@''GNULIB_C32_GET_MAPPING''@/$(GL_GNULIB_C32_GET_MAPPING)/g' \
              -e 
's/@''GNULIB_C32_GET_TYPE_TEST''@/$(GL_GNULIB_C32_GET_TYPE_TEST)/g' \
+             -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \
+             -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \
+             -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \
              -e 's/@''GNULIB_MBRTOC16''@/$(GL_GNULIB_MBRTOC16)/g' \
              -e 's/@''GNULIB_MBRTOC32''@/$(GL_GNULIB_MBRTOC32)/g' \
              -e 's/@''GNULIB_MBSNRTOC32S''@/$(GL_GNULIB_MBSNRTOC32S)/g' \
+             -e 's/@''GNULIB_MBSNRTOWCS''@/$(GL_GNULIB_MBSNRTOWCS)/g' \
              -e 's/@''GNULIB_MBSRTOC32S''@/$(GL_GNULIB_MBSRTOC32S)/g' \
+             -e 's/@''GNULIB_MBSRTOWCS''@/$(GL_GNULIB_MBSRTOWCS)/g' \
              -e 's/@''GNULIB_MBSTOC32S''@/$(GL_GNULIB_MBSTOC32S)/g' \
+             -e 's/@''GNULIB_TOWCTRANS''@/$(GL_GNULIB_TOWCTRANS)/g' \
+             -e 's/@''GNULIB_WCSNRTOMBS''@/$(GL_GNULIB_WCSNRTOMBS)/g' \
+             -e 's/@''GNULIB_WCSRTOMBS''@/$(GL_GNULIB_WCSRTOMBS)/g' \
+             -e 's/@''GNULIB_WCSWIDTH''@/$(GL_GNULIB_WCSWIDTH)/g' \
+             -e 's/@''GNULIB_WCTOB''@/$(GL_GNULIB_WCTOB)/g' \
+             -e 's/@''GNULIB_WCTRANS''@/$(GL_GNULIB_WCTRANS)/g' \
+             -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \
+             -e 's/@''GNULIB_WCWIDTH''@/$(GL_GNULIB_WCWIDTH)/g' \
              -e 's|@''HAVE_C32RTOMB''@|$(HAVE_C32RTOMB)|g' \
              -e 's|@''HAVE_MBRTOC16''@|$(HAVE_MBRTOC16)|g' \
              -e 's|@''HAVE_MBRTOC32''@|$(HAVE_MBRTOC32)|g' \
@@ -3118,6 +3140,7 @@ wctype.h: wctype.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e 
's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
              -e 's/@''GNULIB_ISWBLANK''@/$(GL_GNULIB_ISWBLANK)/g' \
              -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \
+             -e 's/@''GNULIB_ISWPUNCT''@/$(GL_GNULIB_ISWPUNCT)/g' \
              -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \
              -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \
              -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \
@@ -3130,6 +3153,7 @@ wctype.h: wctype.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
              -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
              -e 's/@''REPLACE_ISWDIGIT''@/$(REPLACE_ISWDIGIT)/g' \
+             -e 's/@''REPLACE_ISWPUNCT''@/$(REPLACE_ISWPUNCT)/g' \
              -e 's/@''REPLACE_ISWXDIGIT''@/$(REPLACE_ISWXDIGIT)/g' \
              -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
              -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
diff --git a/gnulib/lib/attribute.h b/gnulib/lib/attribute.h
index 9464fde0f3..e4e36092b0 100644
--- a/gnulib/lib/attribute.h
+++ b/gnulib/lib/attribute.h
@@ -182,6 +182,8 @@
 
 /* The function does not throw exceptions.  */
 /* Applies to: functions.  */
+/* After a function's parameter list, this attribute must come first, before
+   other attributes.  */
 #define ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_NOTHROW
 
 /* Do not inline the function.  */
diff --git a/gnulib/lib/error.in.h b/gnulib/lib/error.in.h
index 94477fde08..61f98c5216 100644
--- a/gnulib/lib/error.in.h
+++ b/gnulib/lib/error.in.h
@@ -53,7 +53,7 @@
 /* Helper macro for supporting the compiler's control flow analysis better.
    It evaluates its arguments only once.
    Test case: Compile copy-file.c with "gcc -Wimplicit-fallthrough".  */
-#ifdef __GNUC__
+#if defined __GNUC__ || defined __clang__
 /* Use 'unreachable' to tell the compiler when the function call does not
    return.  */
 # define __gl_error_call1(function, status, ...) \
@@ -66,11 +66,12 @@
    would trigger a -Wimplicit-fallthrough warning even when STATUS is != 0,
    when not optimizing.  This causes STATUS to be evaluated twice, but
    that's OK since it does not have side effects.  */
-# define __gl_error_call(function, status, ...) \
-    (__builtin_constant_p (status) \
-     ? __gl_error_call1 (function, status, __VA_ARGS__) \
-     : ({ \
-         int const __errstatus = status; \
+# define __gl_error_call(function, status, ...)                 \
+    (__builtin_constant_p (status)                              \
+     ? __gl_error_call1 (function, status, __VA_ARGS__)         \
+     : __extension__                                            \
+       ({                                                       \
+         int const __errstatus = status;                        \
          __gl_error_call1 (function, __errstatus, __VA_ARGS__); \
        }))
 #else
diff --git a/gnulib/lib/getopt-cdefs.in.h b/gnulib/lib/getopt-cdefs.in.h
index e76c78cb21..1a666ebb7b 100644
--- a/gnulib/lib/getopt-cdefs.in.h
+++ b/gnulib/lib/getopt-cdefs.in.h
@@ -57,7 +57,11 @@
 
 #ifndef __THROW
 # if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major__ >= 4)
-#  define __THROW       throw ()
+#  if __cplusplus >= 201103L
+#   define __THROW      noexcept (true)
+#  else
+#   define __THROW      throw ()
+#  endif
 # else
 #  define __THROW
 # endif
diff --git a/gnulib/lib/intprops-internal.h b/gnulib/lib/intprops-internal.h
index 0467a9ca8f..41039a093b 100644
--- a/gnulib/lib/intprops-internal.h
+++ b/gnulib/lib/intprops-internal.h
@@ -20,6 +20,11 @@
 
 #include <limits.h>
 
+/* Pacify GCC 13.2 in some calls to _GL_EXPR_SIGNED.  */
+#if defined __GNUC__ && 4 < __GNUC__ + (3 <= __GNUC_MINOR__)
+# pragma GCC diagnostic ignored "-Wtype-limits"
+#endif
+
 /* Return a value with the common real type of E and V and the value of V.
    Do not evaluate E.  */
 #define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v))
diff --git a/gnulib/lib/iswpunct.c b/gnulib/lib/iswpunct.c
new file mode 100644
index 0000000000..0d60cb71eb
--- /dev/null
+++ b/gnulib/lib/iswpunct.c
@@ -0,0 +1,33 @@
+/* Test wide character for being a punctuation or symbol character.
+   Copyright (C) 2023 Free Software Foundation, Inc.
+
+   This file is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   This file is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <wctype.h>
+
+#include <ctype.h>
+
+int
+iswpunct (wint_t wc)
+#undef iswpunct
+{
+#if defined __ANDROID__
+  if ((unsigned int) wc < 128)
+    return ispunct ((unsigned int) wc);
+#endif
+  return iswpunct (wc);
+}
diff --git a/gnulib/lib/mbrtoc32.c b/gnulib/lib/mbrtoc32.c
index 558717d517..0933437a4b 100644
--- a/gnulib/lib/mbrtoc32.c
+++ b/gnulib/lib/mbrtoc32.c
@@ -255,6 +255,14 @@ mbrtoc32 (char32_t *pwc, const char *s, size_t n, 
mbstate_t *ps)
   /* char32_t and wchar_t are equivalent.  Use mbrtowc().  */
   wchar_t wc;
   size_t ret = mbrtowc (&wc, s, n, ps);
+
+#  if GNULIB_MBRTOC32_REGULAR
+  /* Ensure that mbrtoc32 is regular.  */
+  if (ret < (size_t) -2 && ! mbsinit (ps))
+    /* This occurs on glibc 2.12.  */
+    mbszero (ps);
+#  endif
+
 #  if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION
   if (ret < (size_t) -2 && wc != 0)
     {
diff --git a/gnulib/lib/mbscasecmp.c b/gnulib/lib/mbscasecmp.c
index 3a20cb7f3f..5e0bc67dc0 100644
--- a/gnulib/lib/mbscasecmp.c
+++ b/gnulib/lib/mbscasecmp.c
@@ -23,8 +23,14 @@
 
 #include <ctype.h>
 #include <limits.h>
+#include <stdlib.h>
+#include <uchar.h>
 
-#include "mbuiterf.h"
+#if GNULIB_MCEL_PREFER
+# include "mcel.h"
+#else
+# include "mbuiterf.h"
+#endif
 
 /* Compare the character strings S1 and S2, ignoring case, returning less than,
    equal to or greater than zero if S1 is lexicographically less than, equal to
@@ -37,20 +43,29 @@ mbscasecmp (const char *s1, const char *s2)
   if (s1 == s2)
     return 0;
 
+  const char *iter1 = s1;
+  const char *iter2 = s2;
+
   /* Be careful not to look at the entire extent of s1 or s2 until needed.
      This is useful because when two strings differ, the difference is
      most often already in the very few first characters.  */
   if (MB_CUR_MAX > 1)
     {
+#if GNULIB_MCEL_PREFER
+      while (true)
+        {
+          mcel_t g1 = mcel_scanz (iter1); iter1 += g1.len;
+          mcel_t g2 = mcel_scanz (iter2); iter2 += g2.len;
+          int cmp = mcel_tocmp (c32tolower, g1, g2);
+          if (cmp | !g1.ch)
+            return cmp;
+        }
+#else
       mbuif_state_t state1;
-      const char *iter1;
       mbuif_init (state1);
-      iter1 = s1;
 
       mbuif_state_t state2;
-      const char *iter2;
       mbuif_init (state2);
-      iter2 = s2;
 
       while (mbuif_avail (state1, iter1) && mbuif_avail (state2, iter2))
         {
@@ -71,32 +86,29 @@ mbscasecmp (const char *s1, const char *s2)
         /* s1 terminated before s2.  */
         return -1;
       return 0;
+#endif
     }
   else
-    {
-      const unsigned char *p1 = (const unsigned char *) s1;
-      const unsigned char *p2 = (const unsigned char *) s2;
-      unsigned char c1, c2;
-
-      do
-        {
-          c1 = tolower (*p1);
-          c2 = tolower (*p2);
-
-          if (c1 == '\0')
-            break;
-
-          ++p1;
-          ++p2;
-        }
-      while (c1 == c2);
-
-      if (UCHAR_MAX <= INT_MAX)
-        return c1 - c2;
-      else
+    for (;;)
+      {
+        unsigned char c1 = *iter1++;
+        unsigned char c2 = *iter2++;
         /* On machines where 'char' and 'int' are types of the same size, the
            difference of two 'unsigned char' values - including the sign bit -
            doesn't fit in an 'int'.  */
-        return _GL_CMP (c1, c2);
-    }
+        int cmp = UCHAR_MAX <= INT_MAX ? c1 - c2 : _GL_CMP (c1, c2);
+        if (cmp != 0)
+          {
+            c1 = tolower (c1);
+            if (c1 == c2)
+              cmp = 0;
+            else
+              {
+                c2 = tolower (c2);
+                cmp = UCHAR_MAX <= INT_MAX ? c1 - c2 : _GL_CMP (c1, c2);
+              }
+          }
+        if (cmp | !c1)
+          return cmp;
+      }
 }
diff --git a/gnulib/lib/mbslen.c b/gnulib/lib/mbslen.c
index 18642f55e9..db9fa70d63 100644
--- a/gnulib/lib/mbslen.c
+++ b/gnulib/lib/mbslen.c
@@ -22,7 +22,11 @@
 
 #include <stdlib.h>
 
-#include "mbuiterf.h"
+#if GNULIB_MCEL_PREFER
+# include "mcel.h"
+#else
+# include "mbuiterf.h"
+#endif
 
 /* Return the number of multibyte characters in the character string STRING.  
*/
 size_t
@@ -32,6 +36,10 @@ mbslen (const char *string)
     {
       size_t count = 0;
 
+#if GNULIB_MCEL_PREFER
+      for (; *string; string += mcel_scanz (string).len)
+        count++;
+#else
       mbuif_state_t state;
       const char *iter;
       for (mbuif_init (state), iter = string; mbuif_avail (state, iter); )
@@ -40,6 +48,7 @@ mbslen (const char *string)
           count++;
           iter += mb_len (cur);
         }
+#endif
 
       return count;
     }
diff --git a/gnulib/lib/mbsncasecmp.c b/gnulib/lib/mbsncasecmp.c
index 0b7027d91d..8ee1df7d4d 100644
--- a/gnulib/lib/mbsncasecmp.c
+++ b/gnulib/lib/mbsncasecmp.c
@@ -39,20 +39,19 @@ mbsncasecmp (const char *s1, const char *s2, size_t n)
   if (s1 == s2 || n == 0)
     return 0;
 
+  const char *iter1 = s1;
+  const char *iter2 = s2;
+
   /* Be careful not to look at the entire extent of s1 or s2 until needed.
      This is useful because when two strings differ, the difference is
      most often already in the very few first characters.  */
   if (MB_CUR_MAX > 1)
     {
       mbuif_state_t state1;
-      const char *iter1;
       mbuif_init (state1);
-      iter1 = s1;
 
       mbuif_state_t state2;
-      const char *iter2;
       mbuif_init (state2);
-      iter2 = s2;
 
       while (mbuif_avail (state1, iter1) && mbuif_avail (state2, iter2))
         {
@@ -78,26 +77,26 @@ mbsncasecmp (const char *s1, const char *s2, size_t n)
       return 0;
     }
   else
-    {
-      const unsigned char *p1 = (const unsigned char *) s1;
-      const unsigned char *p2 = (const unsigned char *) s2;
-      unsigned char c1, c2;
-
-      for (; ; p1++, p2++)
-        {
-          c1 = tolower (*p1);
-          c2 = tolower (*p2);
-
-          if (--n == 0 || c1 == '\0' || c1 != c2)
-            break;
-        }
-
-      if (UCHAR_MAX <= INT_MAX)
-        return c1 - c2;
-      else
+    for (;;)
+      {
+        unsigned char c1 = *iter1++;
+        unsigned char c2 = *iter2++;
         /* On machines where 'char' and 'int' are types of the same size, the
            difference of two 'unsigned char' values - including the sign bit -
            doesn't fit in an 'int'.  */
-        return _GL_CMP (c1, c2);
-    }
+        int cmp = UCHAR_MAX <= INT_MAX ? c1 - c2 : _GL_CMP (c1, c2);
+        if (cmp != 0)
+          {
+            c1 = tolower (c1);
+            if (c1 == c2)
+              cmp = 0;
+            else
+              {
+                c2 = tolower (c2);
+                cmp = UCHAR_MAX <= INT_MAX ? c1 - c2 : _GL_CMP (c1, c2);
+              }
+          }
+        if (cmp | !c1 | !--n)
+          return cmp;
+      }
 }
diff --git a/gnulib/lib/mbsstr.c b/gnulib/lib/mbsstr.c
index 03fb7045e3..b8d15f9521 100644
--- a/gnulib/lib/mbsstr.c
+++ b/gnulib/lib/mbsstr.c
@@ -24,7 +24,14 @@
 #include <stdlib.h>
 
 #include "malloca.h"
-#include "mbuiter.h"
+
+#if GNULIB_MCEL_PREFER
+# include "mcel.h"
+typedef mcel_t mbchar_t;
+static bool mb_equal (mcel_t a, mcel_t b) { return mcel_cmp (a, b) == 0; }
+#else
+# include "mbuiter.h"
+#endif
 
 /* Knuth-Morris-Pratt algorithm.  */
 #define UNIT unsigned char
@@ -42,25 +49,36 @@ knuth_morris_pratt_multibyte (const char *haystack, const 
char *needle,
 {
   size_t m = mbslen (needle);
   mbchar_t *needle_mbchars;
-  size_t *table;
+  size_t extra_align = (alignof (mbchar_t) < alignof (size_t)
+                        ? alignof (size_t) - alignof (mbchar_t)
+                        : 0);
 
   /* Allocate room for needle_mbchars and the table.  */
-  void *memory = nmalloca (m, sizeof (mbchar_t) + sizeof (size_t));
+  void *memory = nmalloca (m + !!extra_align,
+                           sizeof (mbchar_t) + sizeof (size_t));
   void *table_memory;
   if (memory == NULL)
     return false;
   needle_mbchars = memory;
   table_memory = needle_mbchars + m;
-  table = table_memory;
+  char *aligned = table_memory;
+  aligned += extra_align;
+  aligned -= (uintptr_t) aligned % alignof (size_t);
+  size_t *table = table_memory = aligned;
 
   /* Fill needle_mbchars.  */
   {
+#if GNULIB_MCEL_PREFER
+    for (size_t j = 0; *needle; needle += needle_mbchars[j++].len)
+      needle_mbchars[j] = mcel_scanz (needle);
+#else
     mbui_iterator_t iter;
     size_t j;
 
     j = 0;
     for (mbui_init (iter, needle); mbui_avail (iter); mbui_advance (iter), j++)
       mb_copy (&needle_mbchars[j], &mbui_cur (iter));
+#endif
   }
 
   /* Fill the table.
@@ -132,6 +150,46 @@ knuth_morris_pratt_multibyte (const char *haystack, const 
char *needle,
 
   /* Search, using the table to accelerate the processing.  */
   {
+#if GNULIB_MCEL_PREFER
+    size_t j;
+    char const *rhaystack = haystack;
+    char const *phaystack = haystack;
+
+    j = 0;
+    /* Invariant: phaystack = rhaystack + j.  */
+    for (;;)
+      {
+        if (!*phaystack)
+          {
+            rhaystack = NULL;
+            break;
+          }
+        mcel_t g = mcel_scanz (phaystack);
+        if (mcel_cmp (needle_mbchars[j], g) == 0)
+          {
+            j++;
+            /* Exit loop successfully if the entire needle has been found.  */
+            if (j == m)
+              break;
+            phaystack += g.len;
+          }
+        else if (j == 0)
+          {
+            /* Found a mismatch at needle[0] already.  */
+            rhaystack += mcel_scanz (rhaystack).len;
+            phaystack += g.len;
+          }
+        else
+          {
+            /* Found a match of needle[0..j-1], mismatch at needle[j].  */
+            size_t count = table[j];
+            j -= count;
+            for (; count != 0; count--)
+              rhaystack += mcel_scanz (rhaystack).len;
+          }
+      }
+    *resultp = rhaystack;
+#else
     size_t j;
     mbui_iterator_t rhaystack;
     mbui_iterator_t phaystack;
@@ -173,6 +231,7 @@ knuth_morris_pratt_multibyte (const char *haystack, const 
char *needle,
           mbui_advance (rhaystack);
           mbui_advance (phaystack);
         }
+#endif
   }
 
   freea (memory);
@@ -191,6 +250,88 @@ mbsstr (const char *haystack, const char *needle)
          needle may be found in haystack.  */
   if (MB_CUR_MAX > 1)
     {
+#if GNULIB_MCEL_PREFER
+      if (!*needle)
+        return (char *) haystack;
+
+      mcel_t ng = mcel_scanz (needle);
+
+      /* Minimizing the worst-case complexity:
+         Let n = mbslen(haystack), m = mbslen(needle).
+         The naïve algorithm is O(n*m) worst-case.
+         The Knuth-Morris-Pratt algorithm is O(n) worst-case but it needs a
+         memory allocation.
+         To achieve linear complexity and yet amortize the cost of the
+         memory allocation, we activate the Knuth-Morris-Pratt algorithm
+         only once the naïve algorithm has already run for some time; more
+         precisely, when
+           - the outer loop count is >= 10,
+           - the average number of comparisons per outer loop is >= 5,
+           - the total number of comparisons is >= m.
+         But we try it only once.  If the memory allocation attempt failed,
+         we don't retry it.  */
+      bool try_kmp = true;
+      size_t outer_loop_count = 0;
+      size_t comparison_count = 0;
+
+      /* Last comparison count, and needle + last_ccount.  */
+      size_t last_ccount = 0;
+      char const *iter_needle_last_ccount = needle;
+
+      char const *iter_haystack = haystack;
+
+      for (mcel_t hg; *iter_haystack; iter_haystack += hg.len)
+        {
+          /* See whether it's advisable to use an asymptotically faster
+             algorithm.  */
+          if (try_kmp
+              && outer_loop_count >= 10
+              && comparison_count >= 5 * outer_loop_count)
+            {
+              /* See if needle + comparison_count now reaches the end of
+                 needle.  */
+              size_t count = comparison_count - last_ccount;
+              for (;
+                   count > 0 && *iter_needle_last_ccount;
+                   count--)
+                iter_needle_last_ccount
+                  += mcel_scanz (iter_needle_last_ccount).len;
+              last_ccount = comparison_count;
+              if (!*iter_needle_last_ccount)
+                {
+                  char const *result;
+                  if (knuth_morris_pratt_multibyte (haystack, needle,
+                                                    &result))
+                    return (char *) result;
+                  try_kmp = false;
+                }
+            }
+
+          outer_loop_count++;
+          comparison_count++;
+          hg = mcel_scanz (iter_haystack);
+          if (mcel_cmp (hg, ng) == 0)
+            /* The first character matches.  */
+            {
+              char const *rhaystack = iter_haystack + hg.len;
+              char const *rneedle = needle + ng.len;
+              mcel_t rhg, rng;
+              do
+                {
+                  if (!*rneedle)
+                    return (char *) iter_haystack;
+                  if (!*rhaystack)
+                    return NULL;
+                  rhg = mcel_scanz (rhaystack); rhaystack += rhg.len;
+                  rng = mcel_scanz (rneedle); rneedle += rng.len;
+                  comparison_count++;
+                }
+              while (mcel_cmp (rhg, rng) == 0);
+            }
+        }
+
+      return NULL;
+#else
       mbui_iterator_t iter_needle;
 
       mbui_init (iter_needle, needle);
@@ -287,6 +428,7 @@ mbsstr (const char *haystack, const char *needle)
         }
       else
         return (char *) haystack;
+#endif
     }
   else
     {
diff --git a/gnulib/lib/mbtowc-lock.c b/gnulib/lib/mbtowc-lock.c
index 6ca6e10f94..c4d0b088f6 100644
--- a/gnulib/lib/mbtowc-lock.c
+++ b/gnulib/lib/mbtowc-lock.c
@@ -37,14 +37,14 @@ typedef int dummy;
 
 /* Macro for exporting a symbol (function, not variable) defined in this file,
    when compiled into a shared library.  */
-# ifndef DLL_EXPORTED
+# ifndef SHLIB_EXPORTED
 #  if HAVE_VISIBILITY
   /* Override the effect of the compiler option '-fvisibility=hidden'.  */
-#   define DLL_EXPORTED __attribute__((__visibility__("default")))
+#   define SHLIB_EXPORTED __attribute__((__visibility__("default")))
 #  elif defined _WIN32 || defined __CYGWIN__
-#   define DLL_EXPORTED __declspec(dllexport)
+#   define SHLIB_EXPORTED __declspec(dllexport)
 #  else
-#   define DLL_EXPORTED
+#   define SHLIB_EXPORTED
 #  endif
 # endif
 
@@ -59,7 +59,7 @@ typedef int dummy;
    because the latter is not guaranteed to be a stable ABI in the future.  */
 
 /* Make sure the function gets exported from DLLs.  */
-DLL_EXPORTED CRITICAL_SECTION *gl_get_mbtowc_lock (void);
+SHLIB_EXPORTED CRITICAL_SECTION *gl_get_mbtowc_lock (void);
 
 static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT;
 static CRITICAL_SECTION lock;
@@ -96,7 +96,7 @@ gl_get_mbtowc_lock (void)
 static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 
 /* Make sure the function gets exported from shared libraries.  */
-DLL_EXPORTED pthread_mutex_t *gl_get_mbtowc_lock (void);
+SHLIB_EXPORTED pthread_mutex_t *gl_get_mbtowc_lock (void);
 
 /* Returns the internal lock used by mbrtowc and mbrtoc32.  */
 pthread_mutex_t *
@@ -123,7 +123,7 @@ atomic_init (void)
 }
 
 /* Make sure the function gets exported from shared libraries.  */
-DLL_EXPORTED mtx_t *gl_get_mbtowc_lock (void);
+SHLIB_EXPORTED mtx_t *gl_get_mbtowc_lock (void);
 
 /* Returns the internal lock used by mbrtowc and mbrtoc32.  */
 mtx_t *
diff --git a/gnulib/lib/nl_langinfo-lock.c b/gnulib/lib/nl_langinfo-lock.c
index e5cdcd3e77..fb12299959 100644
--- a/gnulib/lib/nl_langinfo-lock.c
+++ b/gnulib/lib/nl_langinfo-lock.c
@@ -37,14 +37,14 @@ typedef int dummy;
 
 /* Macro for exporting a symbol (function, not variable) defined in this file,
    when compiled into a shared library.  */
-# ifndef DLL_EXPORTED
+# ifndef SHLIB_EXPORTED
 #  if HAVE_VISIBILITY
   /* Override the effect of the compiler option '-fvisibility=hidden'.  */
-#   define DLL_EXPORTED __attribute__((__visibility__("default")))
+#   define SHLIB_EXPORTED __attribute__((__visibility__("default")))
 #  elif defined _WIN32 || defined __CYGWIN__
-#   define DLL_EXPORTED __declspec(dllexport)
+#   define SHLIB_EXPORTED __declspec(dllexport)
 #  else
-#   define DLL_EXPORTED
+#   define SHLIB_EXPORTED
 #  endif
 # endif
 
@@ -59,7 +59,7 @@ typedef int dummy;
    because the latter is not guaranteed to be a stable ABI in the future.  */
 
 /* Make sure the function gets exported from DLLs.  */
-DLL_EXPORTED CRITICAL_SECTION *gl_get_nl_langinfo_lock (void);
+SHLIB_EXPORTED CRITICAL_SECTION *gl_get_nl_langinfo_lock (void);
 
 static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT;
 static CRITICAL_SECTION lock;
@@ -96,7 +96,7 @@ gl_get_nl_langinfo_lock (void)
 static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 
 /* Make sure the function gets exported from shared libraries.  */
-DLL_EXPORTED pthread_mutex_t *gl_get_nl_langinfo_lock (void);
+SHLIB_EXPORTED pthread_mutex_t *gl_get_nl_langinfo_lock (void);
 
 /* Returns the internal lock used by nl_langinfo.  */
 pthread_mutex_t *
@@ -123,7 +123,7 @@ atomic_init (void)
 }
 
 /* Make sure the function gets exported from shared libraries.  */
-DLL_EXPORTED mtx_t *gl_get_nl_langinfo_lock (void);
+SHLIB_EXPORTED mtx_t *gl_get_nl_langinfo_lock (void);
 
 /* Returns the internal lock used by nl_langinfo.  */
 mtx_t *
diff --git a/gnulib/lib/setlocale-lock.c b/gnulib/lib/setlocale-lock.c
index b70ba09b00..593f63711b 100644
--- a/gnulib/lib/setlocale-lock.c
+++ b/gnulib/lib/setlocale-lock.c
@@ -37,14 +37,14 @@ typedef int dummy;
 
 /* Macro for exporting a symbol (function, not variable) defined in this file,
    when compiled into a shared library.  */
-# ifndef DLL_EXPORTED
+# ifndef SHLIB_EXPORTED
 #  if HAVE_VISIBILITY
   /* Override the effect of the compiler option '-fvisibility=hidden'.  */
-#   define DLL_EXPORTED __attribute__((__visibility__("default")))
+#   define SHLIB_EXPORTED __attribute__((__visibility__("default")))
 #  elif defined _WIN32 || defined __CYGWIN__
-#   define DLL_EXPORTED __declspec(dllexport)
+#   define SHLIB_EXPORTED __declspec(dllexport)
 #  else
-#   define DLL_EXPORTED
+#   define SHLIB_EXPORTED
 #  endif
 # endif
 
@@ -59,7 +59,7 @@ typedef int dummy;
    because the latter is not guaranteed to be a stable ABI in the future.  */
 
 /* Make sure the function gets exported from DLLs.  */
-DLL_EXPORTED CRITICAL_SECTION *gl_get_setlocale_null_lock (void);
+SHLIB_EXPORTED CRITICAL_SECTION *gl_get_setlocale_null_lock (void);
 
 static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT;
 static CRITICAL_SECTION lock;
@@ -96,7 +96,7 @@ gl_get_setlocale_null_lock (void)
 static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 
 /* Make sure the function gets exported from shared libraries.  */
-DLL_EXPORTED pthread_mutex_t *gl_get_setlocale_null_lock (void);
+SHLIB_EXPORTED pthread_mutex_t *gl_get_setlocale_null_lock (void);
 
 /* Returns the internal lock used by setlocale_null_r.  */
 pthread_mutex_t *
@@ -123,7 +123,7 @@ atomic_init (void)
 }
 
 /* Make sure the function gets exported from shared libraries.  */
-DLL_EXPORTED mtx_t *gl_get_setlocale_null_lock (void);
+SHLIB_EXPORTED mtx_t *gl_get_setlocale_null_lock (void);
 
 /* Returns the internal lock used by setlocale_null_r.  */
 mtx_t *
diff --git a/gnulib/lib/stddef.in.h b/gnulib/lib/stddef.in.h
index 431e819b8b..190fd575d8 100644
--- a/gnulib/lib/stddef.in.h
+++ b/gnulib/lib/stddef.in.h
@@ -58,7 +58,7 @@
 
 /* On AIX 7.2, with xlc in 64-bit mode, <stddef.h> defines max_align_t to a
    type with alignment 4, but 'long' has alignment 8.  */
-#  if defined _AIX && defined __LP64__
+#  if defined _AIX && defined __LP64__ && !@HAVE_MAX_ALIGN_T@
 #   if !GNULIB_defined_max_align_t
 #    ifdef _MAX_ALIGN_T
 /* /usr/include/stddef.h has already defined max_align_t.  Override it.  */
@@ -101,11 +101,33 @@ typedef long max_align_t;
 #  ifndef _@GUARD_PREFIX@_STDDEF_H
 #   define _@GUARD_PREFIX@_STDDEF_H
 
-/* This file uses _Noreturn.  */
+/* This file uses _Noreturn, _GL_ATTRIBUTE_NOTHROW.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
 
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+#ifndef _GL_ATTRIBUTE_NOTHROW
+# if defined __cplusplus
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4
+#   if __cplusplus >= 201103L
+#    define _GL_ATTRIBUTE_NOTHROW noexcept (true)
+#   else
+#    define _GL_ATTRIBUTE_NOTHROW throw ()
+#   endif
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# else
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__
+#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# endif
+#endif
+
 /* Some platforms lack wchar_t.  */
 #if !@HAVE_WCHAR_T@
 # define wchar_t int
@@ -178,7 +200,7 @@ extern
 _Noreturn
 void abort (void)
 #  if defined __cplusplus && (__GLIBC__ >= 2)
-throw ()
+_GL_ATTRIBUTE_NOTHROW
 #  endif
 ;
 #  define unreachable() abort ()
diff --git a/gnulib/lib/stdio.in.h b/gnulib/lib/stdio.in.h
index 6be12c0525..118874d877 100644
--- a/gnulib/lib/stdio.in.h
+++ b/gnulib/lib/stdio.in.h
@@ -58,7 +58,8 @@
 #define _@GUARD_PREFIX@_STDIO_H
 
 /* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_FORMAT,
-   _GL_ATTRIBUTE_MALLOC, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */
+   _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NOTHROW, GNULIB_POSIXCHECK,
+   HAVE_RAW_DECL_*.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
@@ -143,6 +144,28 @@
 # endif
 #endif
 
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+#ifndef _GL_ATTRIBUTE_NOTHROW
+# if defined __cplusplus
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4
+#   if __cplusplus >= 201103L
+#    define _GL_ATTRIBUTE_NOTHROW noexcept (true)
+#   else
+#    define _GL_ATTRIBUTE_NOTHROW throw ()
+#   endif
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# else
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__
+#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# endif
+#endif
+
 /* An __attribute__ __format__ specifier for a function that takes a format
    string and arguments, where the format string directives are the ones
    standardized by ISO C99 and POSIX.
@@ -344,10 +367,18 @@ _GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char 
*mode));
 # else
 #  if __GNUC__ >= 11
 /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose.  */
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (fdopen, FILE *,
+                  (int fd, const char *mode)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)
+                  _GL_ATTRIBUTE_MALLOC);
+#   else
 _GL_FUNCDECL_SYS (fdopen, FILE *,
                   (int fd, const char *mode)
                   _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)
                   _GL_ATTRIBUTE_MALLOC);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode));
 # endif
@@ -355,10 +386,18 @@ _GL_CXXALIASWARN (fdopen);
 #else
 # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fdopen
 /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
 _GL_FUNCDECL_SYS (fdopen, FILE *,
                   (int fd, const char *mode)
+                  _GL_ATTRIBUTE_NOTHROW
                   _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)
                   _GL_ATTRIBUTE_MALLOC);
+#  else
+_GL_FUNCDECL_SYS (fdopen, FILE *,
+                  (int fd, const char *mode)
+                  _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)
+                  _GL_ATTRIBUTE_MALLOC);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK
 #  undef fdopen
diff --git a/gnulib/lib/stdlib.in.h b/gnulib/lib/stdlib.in.h
index 1479a2b287..b9838c7d5e 100644
--- a/gnulib/lib/stdlib.in.h
+++ b/gnulib/lib/stdlib.in.h
@@ -38,7 +38,8 @@
 #define _@GUARD_PREFIX@_STDLIB_H
 
 /* This file uses _Noreturn, _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
-   _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */
+   _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK,
+   HAVE_RAW_DECL_*.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
@@ -132,6 +133,28 @@ struct random_data
 # endif
 #endif
 
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+#ifndef _GL_ATTRIBUTE_NOTHROW
+# if defined __cplusplus
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4
+#   if __cplusplus >= 201103L
+#    define _GL_ATTRIBUTE_NOTHROW noexcept (true)
+#   else
+#    define _GL_ATTRIBUTE_NOTHROW throw ()
+#   endif
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# else
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__
+#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# endif
+#endif
+
 /* The __attribute__ feature is available in gcc versions 2.5 and later.
    The attribute __pure__ was added in gcc 2.96.  */
 #ifndef _GL_ATTRIBUTE_PURE
@@ -200,7 +223,7 @@ _GL_WARN_ON_USE (_Exit, "_Exit is unportable - "
 #   define free rpl_free
 #  endif
 #  if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
-_GL_FUNCDECL_RPL (free, void, (void *ptr) throw ());
+_GL_FUNCDECL_RPL (free, void, (void *ptr) _GL_ATTRIBUTE_NOTHROW);
 #  else
 _GL_FUNCDECL_RPL (free, void, (void *ptr));
 #  endif
@@ -234,9 +257,16 @@ _GL_CXXALIAS_RPL (aligned_alloc, void *, (size_t 
alignment, size_t size));
 #  if @HAVE_ALIGNED_ALLOC@
 #   if __GNUC__ >= 11
 /* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free.  */
+#    if __GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2
 _GL_FUNCDECL_SYS (aligned_alloc, void *,
                   (size_t alignment, size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#    else
+_GL_FUNCDECL_SYS (aligned_alloc, void *,
+                  (size_t alignment, size_t size)
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#    endif
 #   endif
 _GL_CXXALIAS_SYS (aligned_alloc, void *, (size_t alignment, size_t size));
 #  endif
@@ -247,9 +277,16 @@ _GL_CXXALIASWARN (aligned_alloc);
 #else
 # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined aligned_alloc
 /* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2
+_GL_FUNCDECL_SYS (aligned_alloc, void *,
+                  (size_t alignment, size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
 _GL_FUNCDECL_SYS (aligned_alloc, void *,
                   (size_t alignment, size_t size)
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK
 #  undef aligned_alloc
@@ -292,9 +329,16 @@ _GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t 
size));
 # else
 #  if __GNUC__ >= 11
 /* For -Wmismatched-dealloc: Associate calloc with free or rpl_free.  */
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2
+_GL_FUNCDECL_SYS (calloc, void *,
+                  (size_t nmemb, size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
 _GL_FUNCDECL_SYS (calloc, void *,
                   (size_t nmemb, size_t size)
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size));
 # endif
@@ -304,9 +348,16 @@ _GL_CXXALIASWARN (calloc);
 #else
 # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined calloc
 /* For -Wmismatched-dealloc: Associate calloc with free or rpl_free.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2
 _GL_FUNCDECL_SYS (calloc, void *,
                   (size_t nmemb, size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
+_GL_FUNCDECL_SYS (calloc, void *,
+                  (size_t nmemb, size_t size)
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK
 #  undef calloc
@@ -328,10 +379,18 @@ _GL_FUNCDECL_RPL (canonicalize_file_name, char *,
 _GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name));
 # else
 #  if !@HAVE_CANONICALIZE_FILE_NAME@ || __GNUC__ >= 11
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
 _GL_FUNCDECL_SYS (canonicalize_file_name, char *,
                   (const char *name)
+                  _GL_ATTRIBUTE_NOTHROW
                   _GL_ARG_NONNULL ((1))
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
+_GL_FUNCDECL_SYS (canonicalize_file_name, char *,
+                  (const char *name)
+                  _GL_ARG_NONNULL ((1))
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name));
 # endif
@@ -344,10 +403,18 @@ _GL_CXXALIASWARN (canonicalize_file_name);
 # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined canonicalize_file_name
 /* For -Wmismatched-dealloc: Associate canonicalize_file_name with free or
    rpl_free.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (canonicalize_file_name, char *,
+                  (const char *name)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ARG_NONNULL ((1))
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
 _GL_FUNCDECL_SYS (canonicalize_file_name, char *,
                   (const char *name)
                   _GL_ARG_NONNULL ((1))
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK
 #  undef canonicalize_file_name
@@ -569,9 +636,16 @@ _GL_CXXALIAS_RPL (malloc, void *, (size_t size));
 # else
 #  if __GNUC__ >= 11
 /* For -Wmismatched-dealloc: Associate malloc with free or rpl_free.  */
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2
+_GL_FUNCDECL_SYS (malloc, void *,
+                  (size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
 _GL_FUNCDECL_SYS (malloc, void *,
                   (size_t size)
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (malloc, void *, (size_t size));
 # endif
@@ -581,9 +655,16 @@ _GL_CXXALIASWARN (malloc);
 #else
 # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined malloc
 /* For -Wmismatched-dealloc: Associate malloc with free or rpl_free.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2
+_GL_FUNCDECL_SYS (malloc, void *,
+                  (size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
 _GL_FUNCDECL_SYS (malloc, void *,
                   (size_t size)
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
 #  undef malloc
@@ -1292,8 +1373,16 @@ _GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t 
size));
 # else
 #  if __GNUC__ >= 11
 /* For -Wmismatched-dealloc: Associate realloc with free or rpl_free.  */
-_GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size)
-                                   _GL_ATTRIBUTE_DEALLOC_FREE);
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2
+_GL_FUNCDECL_SYS (realloc, void *,
+                  (void *ptr, size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
+_GL_FUNCDECL_SYS (realloc, void *,
+                  (void *ptr, size_t size)
+                  _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size));
 # endif
@@ -1303,8 +1392,16 @@ _GL_CXXALIASWARN (realloc);
 #else
 # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined realloc
 /* For -Wmismatched-dealloc: Associate realloc with free or rpl_free.  */
-_GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size)
-                                   _GL_ATTRIBUTE_DEALLOC_FREE);
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2
+_GL_FUNCDECL_SYS (realloc, void *,
+                  (void *ptr, size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
+_GL_FUNCDECL_SYS (realloc, void *,
+                  (void *ptr, size_t size)
+                  _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
 #  undef realloc
diff --git a/gnulib/lib/string.in.h b/gnulib/lib/string.in.h
index 912d0f7a30..8b62ae8fc9 100644
--- a/gnulib/lib/string.in.h
+++ b/gnulib/lib/string.in.h
@@ -45,7 +45,8 @@
 #define _@GUARD_PREFIX@_STRING_H
 
 /* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
-   _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */
+   _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK,
+   HAVE_RAW_DECL_*.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
@@ -110,6 +111,28 @@
 # endif
 #endif
 
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+#ifndef _GL_ATTRIBUTE_NOTHROW
+# if defined __cplusplus
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4
+#   if __cplusplus >= 201103L
+#    define _GL_ATTRIBUTE_NOTHROW noexcept (true)
+#   else
+#    define _GL_ATTRIBUTE_NOTHROW throw ()
+#   endif
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# else
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__
+#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# endif
+#endif
+
 /* The __attribute__ feature is available in gcc versions 2.5 and later.
    The attribute __pure__ was added in gcc 2.96.  */
 #ifndef _GL_ATTRIBUTE_PURE
@@ -133,7 +156,7 @@
       && !(defined __cplusplus && defined GNULIB_NAMESPACE))
 /* We can't do '#define free rpl_free' here.  */
 #  if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
-_GL_EXTERN_C void rpl_free (void *) throw ();
+_GL_EXTERN_C void rpl_free (void *) _GL_ATTRIBUTE_NOTHROW;
 #  else
 _GL_EXTERN_C void rpl_free (void *);
 #  endif
@@ -148,7 +171,7 @@ _GL_EXTERN_C
      void __cdecl free (void *);
 #  else
 #   if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
-_GL_EXTERN_C void free (void *) throw ();
+_GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW;
 #   else
 _GL_EXTERN_C void free (void *);
 #   endif
@@ -163,7 +186,7 @@ _GL_EXTERN_C
      void __cdecl free (void *);
 # else
 #  if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
-_GL_EXTERN_C void free (void *) throw ();
+_GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW;
 #  else
 _GL_EXTERN_C void free (void *);
 #  endif
@@ -266,9 +289,12 @@ _GL_CXXALIAS_SYS_CAST2 (memchr,
 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
          || defined __clang__)
-_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n) throw ());
+_GL_CXXALIASWARN1 (memchr, void *,
+                   (void *__s, int __c, size_t __n)
+                   _GL_ATTRIBUTE_NOTHROW);
 _GL_CXXALIASWARN1 (memchr, void const *,
-                   (void const *__s, int __c, size_t __n) throw ());
+                   (void const *__s, int __c, size_t __n)
+                   _GL_ATTRIBUTE_NOTHROW);
 # elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (memchr);
 # endif
@@ -368,8 +394,12 @@ _GL_CXXALIAS_SYS_CAST2 (memrchr,
 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
          || defined __clang__)
-_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t) throw ());
-_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t) throw 
());
+_GL_CXXALIASWARN1 (memrchr, void *,
+                   (void *, int, size_t)
+                   _GL_ATTRIBUTE_NOTHROW);
+_GL_CXXALIASWARN1 (memrchr, void const *,
+                   (void const *, int, size_t)
+                   _GL_ATTRIBUTE_NOTHROW);
 # elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (memrchr);
 # endif
@@ -416,9 +446,12 @@ _GL_CXXALIAS_SYS_CAST2 (rawmemchr,
 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
          || defined __clang__)
-_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in) throw ());
+_GL_CXXALIASWARN1 (rawmemchr, void *,
+                   (void *__s, int __c_in)
+                   _GL_ATTRIBUTE_NOTHROW);
 _GL_CXXALIASWARN1 (rawmemchr, void const *,
-                   (void const *__s, int __c_in) throw ());
+                   (void const *__s, int __c_in)
+                   _GL_ATTRIBUTE_NOTHROW);
 # else
 _GL_CXXALIASWARN (rawmemchr);
 # endif
@@ -538,9 +571,12 @@ _GL_CXXALIAS_SYS_CAST2 (strchrnul,
 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
          || defined __clang__)
-_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in) throw ());
+_GL_CXXALIASWARN1 (strchrnul, char *,
+                   (char *__s, int __c_in)
+                   _GL_ATTRIBUTE_NOTHROW);
 _GL_CXXALIASWARN1 (strchrnul, char const *,
-                   (char const *__s, int __c_in) throw ());
+                   (char const *__s, int __c_in)
+                   _GL_ATTRIBUTE_NOTHROW);
 # elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (strchrnul);
 # endif
@@ -576,10 +612,18 @@ _GL_CXXALIAS_MDA (strdup, char *, (char const *__s));
 #   undef strdup
 #  endif
 #  if (!@HAVE_DECL_STRDUP@ || __GNUC__ >= 11) && !defined strdup
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (strdup, char *,
+                  (char const *__s)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ARG_NONNULL ((1))
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
 _GL_FUNCDECL_SYS (strdup, char *,
                   (char const *__s)
                   _GL_ARG_NONNULL ((1))
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
 # endif
@@ -587,10 +631,18 @@ _GL_CXXALIASWARN (strdup);
 #else
 # if __GNUC__ >= 11 && !defined strdup
 /* For -Wmismatched-dealloc: Associate strdup with free or rpl_free.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (strdup, char *,
+                  (char const *__s)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ARG_NONNULL ((1))
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
 _GL_FUNCDECL_SYS (strdup, char *,
                   (char const *__s)
                   _GL_ARG_NONNULL ((1))
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK
 #  undef strdup
@@ -659,10 +711,18 @@ _GL_FUNCDECL_RPL (strndup, char *,
 _GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n));
 # else
 #  if !@HAVE_DECL_STRNDUP@ || (__GNUC__ >= 11 && !defined strndup)
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
 _GL_FUNCDECL_SYS (strndup, char *,
                   (char const *__s, size_t __n)
+                  _GL_ATTRIBUTE_NOTHROW
                   _GL_ARG_NONNULL ((1))
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
+_GL_FUNCDECL_SYS (strndup, char *,
+                  (char const *__s, size_t __n)
+                  _GL_ARG_NONNULL ((1))
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n));
 # endif
@@ -670,10 +730,18 @@ _GL_CXXALIASWARN (strndup);
 #else
 # if __GNUC__ >= 11 && !defined strndup
 /* For -Wmismatched-dealloc: Associate strndup with free or rpl_free.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (strndup, char *,
+                  (char const *__s, size_t __n)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ARG_NONNULL ((1))
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
 _GL_FUNCDECL_SYS (strndup, char *,
                   (char const *__s, size_t __n)
                   _GL_ARG_NONNULL ((1))
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK
 #  undef strndup
@@ -742,9 +810,12 @@ _GL_CXXALIAS_SYS_CAST2 (strpbrk,
 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
          || defined __clang__)
-_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept) throw 
());
+_GL_CXXALIASWARN1 (strpbrk, char *,
+                   (char *__s, char const *__accept)
+                   _GL_ATTRIBUTE_NOTHROW);
 _GL_CXXALIASWARN1 (strpbrk, char const *,
-                   (char const *__s, char const *__accept) throw ());
+                   (char const *__s, char const *__accept)
+                   _GL_ATTRIBUTE_NOTHROW);
 # elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (strpbrk);
 # endif
@@ -852,9 +923,11 @@ _GL_CXXALIAS_SYS_CAST2 (strstr,
      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
          || defined __clang__)
 _GL_CXXALIASWARN1 (strstr, char *,
-                   (char *haystack, const char *needle) throw ());
+                   (char *haystack, const char *needle)
+                   _GL_ATTRIBUTE_NOTHROW);
 _GL_CXXALIASWARN1 (strstr, const char *,
-                   (const char *haystack, const char *needle) throw ());
+                   (const char *haystack, const char *needle)
+                   _GL_ATTRIBUTE_NOTHROW);
 # elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (strstr);
 # endif
@@ -903,9 +976,11 @@ _GL_CXXALIAS_SYS_CAST2 (strcasestr,
      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
          || defined __clang__)
 _GL_CXXALIASWARN1 (strcasestr, char *,
-                   (char *haystack, const char *needle) throw ());
+                   (char *haystack, const char *needle)
+                   _GL_ATTRIBUTE_NOTHROW);
 _GL_CXXALIASWARN1 (strcasestr, const char *,
-                   (const char *haystack, const char *needle) throw ());
+                   (const char *haystack, const char *needle)
+                   _GL_ATTRIBUTE_NOTHROW);
 # elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (strcasestr);
 # endif
diff --git a/gnulib/lib/sys_stat.in.h b/gnulib/lib/sys_stat.in.h
index ad4da17fa4..25a539f705 100644
--- a/gnulib/lib/sys_stat.in.h
+++ b/gnulib/lib/sys_stat.in.h
@@ -55,17 +55,41 @@
 #ifndef _@GUARD_PREFIX@_SYS_STAT_H
 #define _@GUARD_PREFIX@_SYS_STAT_H
 
-/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */
+/* This file uses _GL_ATTRIBUTE_NOTHROW, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  
*/
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
 
+
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+#ifndef _GL_ATTRIBUTE_NOTHROW
+# if defined __cplusplus
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4
+#   if __cplusplus >= 201103L
+#    define _GL_ATTRIBUTE_NOTHROW noexcept (true)
+#   else
+#    define _GL_ATTRIBUTE_NOTHROW throw ()
+#   endif
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# else
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__
+#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# endif
+#endif
+
 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
 
 /* The definition of _GL_ARG_NONNULL is copied here.  */
 
 /* The definition of _GL_WARN_ON_USE is copied here.  */
 
+
 /* Before doing "#define mknod rpl_mknod" below, we need to include all
    headers that may declare mknod().  OS/2 kLIBC declares mknod() in
    <unistd.h>, not in <sys/stat.h>.  */
@@ -575,7 +599,11 @@ _GL_WARN_ON_USE (futimens, "futimens is not portable - "
 
 #if @GNULIB_GETUMASK@
 # if !@HAVE_GETUMASK@
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (getumask, mode_t, (void) _GL_ATTRIBUTE_NOTHROW);
+#  else
 _GL_FUNCDECL_SYS (getumask, mode_t, (void));
+#  endif
 # endif
 _GL_CXXALIAS_SYS (getumask, mode_t, (void));
 # if @HAVE_GETUMASK@
diff --git a/gnulib/lib/uchar.in.h b/gnulib/lib/uchar.in.h
index ed1a688d0c..1856aec823 100644
--- a/gnulib/lib/uchar.in.h
+++ b/gnulib/lib/uchar.in.h
@@ -21,13 +21,13 @@
  */
 
 #ifndef _@GUARD_PREFIX@_UCHAR_H
-#define _@GUARD_PREFIX@_UCHAR_H
 
 #if __GNUC__ >= 3
 @PRAGMA_SYSTEM_HEADER@
 #endif
 @PRAGMA_COLUMNS@
 
+/* The include_next requires a split double-inclusion guard.  */
 #if @HAVE_UCHAR_H@
 # if defined __HAIKU__
 /* Work around <https://dev.haiku-os.org/ticket/17040>.  */
@@ -44,6 +44,9 @@
 # @INCLUDE_NEXT@ @NEXT_UCHAR_H@
 #endif
 
+#ifndef _@GUARD_PREFIX@_UCHAR_H
+#define _@GUARD_PREFIX@_UCHAR_H
+
 /* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_BEGIN_C_LINKAGE,
    _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */
 #if !_GL_CONFIG_H_INCLUDED
@@ -159,7 +162,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE _GL_ATTRIBUTE_PURE wint_t
 btoc32 (int c)
 {
-  return btowc (c);
+  return
+#  if @GNULIB_BTOWC@ && defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         btowc (c);
 }
 _GL_END_C_LINKAGE
 # else
@@ -177,7 +184,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32isalnum (wint_t wc)
 {
-  return iswalnum (wc);
+  return
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         iswalnum (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -192,7 +203,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32isalpha (wint_t wc)
 {
-  return iswalpha (wc);
+  return
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         iswalpha (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -207,7 +222,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32isblank (wint_t wc)
 {
-  return iswblank (wc);
+  return
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         iswblank (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -222,7 +241,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32iscntrl (wint_t wc)
 {
-  return iswcntrl (wc);
+  return
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         iswcntrl (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -237,7 +260,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32isdigit (wint_t wc)
 {
-  return iswdigit (wc);
+  return
+#  if @GNULIB_ISWDIGIT@ && defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         iswdigit (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -252,7 +279,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32isgraph (wint_t wc)
 {
-  return iswgraph (wc);
+  return
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         iswgraph (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -267,7 +298,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32islower (wint_t wc)
 {
-  return iswlower (wc);
+  return
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         iswlower (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -282,7 +317,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32isprint (wint_t wc)
 {
-  return iswprint (wc);
+  return
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         iswprint (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -297,7 +336,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32ispunct (wint_t wc)
 {
-  return iswpunct (wc);
+  return
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         iswpunct (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -312,7 +355,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32isspace (wint_t wc)
 {
-  return iswspace (wc);
+  return
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         iswspace (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -327,7 +374,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32isupper (wint_t wc)
 {
-  return iswupper (wc);
+  return
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         iswupper (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -342,7 +393,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32isxdigit (wint_t wc)
 {
-  return iswxdigit (wc);
+  return
+#  if @GNULIB_ISWXDIGIT@ && defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         iswxdigit (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -360,7 +415,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE wint_t
 c32tolower (wint_t wc)
 {
-  return towlower (wc);
+  return
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         towlower (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -375,7 +434,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE wint_t
 c32toupper (wint_t wc)
 {
-  return towupper (wc);
+  return
+#  if defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         towupper (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -393,7 +456,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32width (char32_t wc)
 {
-  return wcwidth (wc);
+  return
+#  if @GNULIB_WCWIDTH@ && defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         wcwidth (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -439,7 +506,11 @@ _GL_INLINE _GL_ARG_NONNULL ((2)) size_t
 c32snrtombs (char *dest, const char32_t **srcp, size_t srclen, size_t len,
              mbstate_t *ps)
 {
-  return wcsnrtombs (dest, (const wchar_t **) srcp, srclen, len, ps);
+  return
+#  if @GNULIB_WCSNRTOMBS@ && defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         wcsnrtombs (dest, (const wchar_t **) srcp, srclen, len, ps);
 }
 _GL_END_C_LINKAGE
 # else
@@ -462,7 +533,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE _GL_ARG_NONNULL ((2)) size_t
 c32srtombs (char *dest, const char32_t **srcp, size_t len, mbstate_t *ps)
 {
-  return wcsrtombs (dest, (const wchar_t **) srcp, len, ps);
+  return
+#  if @GNULIB_WCSRTOMBS@ && defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         wcsrtombs (dest, (const wchar_t **) srcp, len, ps);
 }
 _GL_END_C_LINKAGE
 # else
@@ -508,7 +583,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE _GL_ARG_NONNULL ((1)) int
 c32swidth (const char32_t *s, size_t n)
 {
-  return wcswidth ((const wchar_t *) s, n);
+  return
+#  if @GNULIB_WCSWIDTH@ && defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         wcswidth ((const wchar_t *) s, n);
 }
 _GL_END_C_LINKAGE
 # else
@@ -529,7 +608,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32tob (wint_t wc)
 {
-  return wctob (wc);
+  return
+#  if @GNULIB_WCTOB@ && defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         wctob (wc);
 }
 _GL_END_C_LINKAGE
 # else
@@ -611,7 +694,11 @@ _GL_INLINE _GL_ARG_NONNULL ((2)) size_t
 mbsnrtoc32s (char32_t *dest, const char **srcp, size_t srclen, size_t len,
              mbstate_t *ps)
 {
-  return mbsnrtowcs ((wchar_t *) dest, srcp, srclen, len, ps);
+  return
+#  if @GNULIB_MBSNRTOWCS@ && defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         mbsnrtowcs ((wchar_t *) dest, srcp, srclen, len, ps);
 }
 _GL_END_C_LINKAGE
 # else
@@ -634,7 +721,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE _GL_ARG_NONNULL ((2)) size_t
 mbsrtoc32s (char32_t *dest, const char **srcp, size_t len, mbstate_t *ps)
 {
-  return mbsrtowcs ((wchar_t *) dest, srcp, len, ps);
+  return
+#  if @GNULIB_MBSRTOWCS@ && defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         mbsrtowcs ((wchar_t *) dest, srcp, len, ps);
 }
 _GL_END_C_LINKAGE
 # else
@@ -697,7 +788,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE _GL_ARG_NONNULL ((1)) c32_type_test_t
 c32_get_type_test (const char *name)
 {
-  return wctype (name);
+  return
+#  if @GNULIB_WCTYPE@ && defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         wctype (name);
 }
 _GL_END_C_LINKAGE
 # else
@@ -720,7 +815,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE int
 c32_apply_type_test (wint_t wc, c32_type_test_t property)
 {
-  return iswctype (wc, property);
+  return
+#  if @GNULIB_ISWCTYPE@ && defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         iswctype (wc, property);
 }
 _GL_END_C_LINKAGE
 #  else
@@ -761,7 +860,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE _GL_ARG_NONNULL ((1)) c32_mapping_t
 c32_get_mapping (const char *name)
 {
-  return wctrans (name);
+  return
+#  if @GNULIB_WCTRANS@ && defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         wctrans (name);
 }
 _GL_END_C_LINKAGE
 # else
@@ -783,7 +886,11 @@ _GL_BEGIN_C_LINKAGE
 _GL_INLINE _GL_ARG_NONNULL ((2)) wint_t
 c32_apply_mapping (wint_t wc, c32_mapping_t mapping)
 {
-  return towctrans (wc, mapping);
+  return
+#  if @GNULIB_TOWCTRANS@ && defined __cplusplus && defined GNULIB_NAMESPACE
+         GNULIB_NAMESPACE::
+#  endif
+         towctrans (wc, mapping);
 }
 _GL_END_C_LINKAGE
 # else
@@ -800,3 +907,4 @@ _GL_CXXALIASWARN (c32_apply_mapping);
 _GL_INLINE_HEADER_END
 
 #endif /* _@GUARD_PREFIX@_UCHAR_H */
+#endif /* _@GUARD_PREFIX@_UCHAR_H */
diff --git a/gnulib/lib/verify.h b/gnulib/lib/verify.h
index e4af91517e..181dc6c292 100644
--- a/gnulib/lib/verify.h
+++ b/gnulib/lib/verify.h
@@ -188,9 +188,9 @@ template <int w>
     _gl_verify_type<(R) ? 1 : -1>
 #elif defined _GL_HAVE__STATIC_ASSERT
 # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
-    struct {                                   \
-      _Static_assert (R, DIAGNOSTIC);          \
-      int _gl_dummy;                          \
+    struct { \
+      _Static_assert (R, DIAGNOSTIC); \
+      int _gl_dummy; \
     }
 #else
 # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
@@ -212,8 +212,8 @@ template <int w>
 #elif defined _GL_HAVE__STATIC_ASSERT
 # define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC)
 #else
-# define _GL_VERIFY(R, DIAGNOSTIC, ...)                                \
-    extern int (*_GL_GENSYM (_gl_verify_function) (void))             \
+# define _GL_VERIFY(R, DIAGNOSTIC, ...) \
+    extern int (*_GL_GENSYM (_gl_verify_function) (void)) \
       [_GL_VERIFY_TRUE (R, DIAGNOSTIC)]
 # if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
 #  pragma GCC diagnostic ignored "-Wnested-externs"
diff --git a/gnulib/lib/wchar.in.h b/gnulib/lib/wchar.in.h
index 510f202537..f1bbff6b94 100644
--- a/gnulib/lib/wchar.in.h
+++ b/gnulib/lib/wchar.in.h
@@ -85,7 +85,8 @@
 #define _@GUARD_PREFIX@_WCHAR_H
 
 /* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
-   _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */
+   _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK,
+   HAVE_RAW_DECL_*.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
@@ -136,6 +137,28 @@
 # endif
 #endif
 
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+#ifndef _GL_ATTRIBUTE_NOTHROW
+# if defined __cplusplus
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4
+#   if __cplusplus >= 201103L
+#    define _GL_ATTRIBUTE_NOTHROW noexcept (true)
+#   else
+#    define _GL_ATTRIBUTE_NOTHROW throw ()
+#   endif
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# else
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__
+#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# endif
+#endif
+
 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
 
 /* The definition of _GL_ARG_NONNULL is copied here.  */
@@ -195,7 +218,7 @@ typedef int rpl_mbstate_t;
       && !(defined __cplusplus && defined GNULIB_NAMESPACE))
 /* We can't do '#define free rpl_free' here.  */
 #  if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
-_GL_EXTERN_C void rpl_free (void *) throw ();
+_GL_EXTERN_C void rpl_free (void *) _GL_ATTRIBUTE_NOTHROW;
 #  else
 _GL_EXTERN_C void rpl_free (void *);
 #  endif
@@ -210,7 +233,7 @@ _GL_EXTERN_C
      void __cdecl free (void *);
 #  else
 #   if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
-_GL_EXTERN_C void free (void *) throw ();
+_GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW;
 #   else
 _GL_EXTERN_C void free (void *);
 #   endif
@@ -225,7 +248,7 @@ _GL_EXTERN_C
      void __cdecl free (void *);
 # else
 #  if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
-_GL_EXTERN_C void free (void *) throw ();
+_GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW;
 #  else
 _GL_EXTERN_C void free (void *);
 #  endif
@@ -1303,9 +1326,16 @@ _GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s));
    namespace, not in the global namespace.  So, force a declaration in
    the global namespace.  */
 #  if !@HAVE_WCSDUP@ || (defined __sun && defined __cplusplus) || __GNUC__ >= 
11
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
+                  (const wchar_t *s)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
 _GL_FUNCDECL_SYS (wcsdup, wchar_t *,
                   (const wchar_t *s)
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
 # endif
@@ -1313,9 +1343,16 @@ _GL_CXXALIASWARN (wcsdup);
 #else
 # if __GNUC__ >= 11 && !defined wcsdup
 /* For -Wmismatched-dealloc: Associate wcsdup with free or rpl_free.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
+                  (const wchar_t *s)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
 _GL_FUNCDECL_SYS (wcsdup, wchar_t *,
                   (const wchar_t *s)
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK
 #  undef wcsdup
@@ -1334,9 +1371,16 @@ _GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
 #   endif
 _GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s));
 #  else
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
+                  (const wchar_t *s)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
 _GL_FUNCDECL_SYS (wcsdup, wchar_t *,
                   (const wchar_t *s)
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #   if @HAVE_DECL_WCSDUP@
 _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
 #   endif
diff --git a/gnulib/lib/wctype.in.h b/gnulib/lib/wctype.in.h
index fd52715a8a..6f1e7ef149 100644
--- a/gnulib/lib/wctype.in.h
+++ b/gnulib/lib/wctype.in.h
@@ -133,7 +133,7 @@ typedef unsigned int rpl_wint_t;
    Linux libc5 has <wctype.h> and the functions but they are broken.
    mingw and MSVC have <wctype.h> and the functions but they take a wchar_t
    as argument, not an rpl_wint_t.  Additionally, the mingw iswprint function
-   is broken.
+   and the Android iswpunct function are broken.
    Assume all 11 functions (all isw* except iswblank) are implemented the
    same way, or not at all.  */
 # if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
@@ -494,6 +494,16 @@ _GL_FUNCDECL_RPL (iswdigit, int, (wint_t wc));
 #   endif
 #  endif
 
+#  if @GNULIB_ISWPUNCT@
+#   if @REPLACE_ISWPUNCT@
+#    if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#     undef iswpunct
+#     define iswpunct rpl_iswpunct
+#    endif
+_GL_FUNCDECL_RPL (iswpunct, int, (wint_t wc));
+#   endif
+#  endif
+
 #  if @GNULIB_ISWXDIGIT@
 #   if @REPLACE_ISWXDIGIT@
 #    if !(defined __cplusplus && defined GNULIB_NAMESPACE)
diff --git a/gnulib/lib/xalloc-oversized.h b/gnulib/lib/xalloc-oversized.h
index 5dbdfb5506..483bd11796 100644
--- a/gnulib/lib/xalloc-oversized.h
+++ b/gnulib/lib/xalloc-oversized.h
@@ -48,13 +48,13 @@
 #if 7 <= __GNUC__ && !defined __clang__ && PTRDIFF_MAX < SIZE_MAX
 # define xalloc_oversized(n, s) \
    __builtin_mul_overflow_p (n, s, (ptrdiff_t) 1)
-#elif (5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__ \
-       && PTRDIFF_MAX < SIZE_MAX)
+#elif 5 <= __GNUC__ && !defined __ICC && PTRDIFF_MAX < SIZE_MAX
 # define xalloc_oversized(n, s) \
    (__builtin_constant_p (n) && __builtin_constant_p (s) \
     ? __xalloc_oversized (n, s) \
-    : ({ ptrdiff_t __xalloc_count; \
-         __builtin_mul_overflow (n, s, &__xalloc_count); }))
+    : __extension__ \
+        ({ ptrdiff_t __xalloc_count; \
+           __builtin_mul_overflow (n, s, &__xalloc_count); }))
 
 /* Other compilers use integer division; this may be slower but is
    more portable.  */
diff --git a/gnulib/m4/absolute-header.m4 b/gnulib/m4/absolute-header.m4
index e794764888..0cab36454d 100644
--- a/gnulib/m4/absolute-header.m4
+++ b/gnulib/m4/absolute-header.m4
@@ -1,4 +1,4 @@
-# absolute-header.m4 serial 17
+# absolute-header.m4 serial 18
 dnl Copyright (C) 2006-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -66,7 +66,7 @@ AC_DEFUN([gl_ABSOLUTE_HEADER_ONE],
   esac
 changequote(,)
   case "$host_os" in
-    mingw*)
+    mingw* | windows*)
       dnl For the sake of native Windows compilers (excluding gcc),
       dnl treat backslash as a directory separator, like /.
       dnl Actually, these compilers use a double-backslash as
diff --git a/gnulib/m4/btowc.m4 b/gnulib/m4/btowc.m4
index 1cd100a2d7..c1d956b755 100644
--- a/gnulib/m4/btowc.m4
+++ b/gnulib/m4/btowc.m4
@@ -1,4 +1,4 @@
-# btowc.m4 serial 13
+# btowc.m4 serial 14
 dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -40,12 +40,12 @@ int main ()
           [
 changequote(,)dnl
            case "$host_os" in
-                      # Guess no on Cygwin.
-             cygwin*) gl_cv_func_btowc_nul="guessing no" ;;
-                      # Guess yes on native Windows.
-             mingw*)  gl_cv_func_btowc_nul="guessing yes" ;;
-                      # Guess yes otherwise.
-             *)       gl_cv_func_btowc_nul="guessing yes" ;;
+                                # Guess no on Cygwin.
+             cygwin*)           gl_cv_func_btowc_nul="guessing no" ;;
+                                # Guess yes on native Windows.
+             mingw* | windows*) gl_cv_func_btowc_nul="guessing yes" ;;
+                                # Guess yes otherwise.
+             *)                 gl_cv_func_btowc_nul="guessing yes" ;;
            esac
 changequote([,])dnl
           ])
@@ -59,12 +59,12 @@ changequote([,])dnl
         dnl is present.
 changequote(,)dnl
         case "$host_os" in
-                  # Guess no on IRIX.
-          irix*)  gl_cv_func_btowc_eof="guessing no" ;;
-                  # Guess yes on native Windows.
-          mingw*) gl_cv_func_btowc_eof="guessing yes" ;;
-                  # Guess yes otherwise.
-          *)      gl_cv_func_btowc_eof="guessing yes" ;;
+                             # Guess no on IRIX.
+          irix*)             gl_cv_func_btowc_eof="guessing no" ;;
+                             # Guess yes on native Windows.
+          mingw* | windows*) gl_cv_func_btowc_eof="guessing yes" ;;
+                             # Guess yes otherwise.
+          *)                 gl_cv_func_btowc_eof="guessing yes" ;;
         esac
 changequote([,])dnl
         if test $LOCALE_FR != none; then
@@ -116,17 +116,18 @@ int main ()
           [gl_cv_func_btowc_consistent=yes],
           [gl_cv_func_btowc_consistent=no],
           [case "$host_os" in
-                     # Guess no on mingw.
-             mingw*) AC_EGREP_CPP([Problem], [
+               # Guess no on mingw.
+             mingw* | windows*)
+               AC_EGREP_CPP([Problem], [
 #ifdef __MINGW32__
  Problem
 #endif
-                       ],
-                       [gl_cv_func_btowc_consistent="guessing no"],
-                       [gl_cv_func_btowc_consistent="guessing yes"])
-                     ;;
-                     # Guess yes otherwise.
-             *)      gl_cv_func_btowc_consistent="guessing yes" ;;
+                 ],
+                 [gl_cv_func_btowc_consistent="guessing no"],
+                 [gl_cv_func_btowc_consistent="guessing yes"])
+               ;;
+               # Guess yes otherwise.
+             *) gl_cv_func_btowc_consistent="guessing yes" ;;
            esac
           ])
       ])
diff --git a/gnulib/m4/calloc.m4 b/gnulib/m4/calloc.m4
index 3789cbffbf..e2f5677556 100644
--- a/gnulib/m4/calloc.m4
+++ b/gnulib/m4/calloc.m4
@@ -1,4 +1,4 @@
-# calloc.m4 serial 30
+# calloc.m4 serial 31
 
 # Copyright (C) 2004-2023 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
@@ -41,7 +41,7 @@ AC_DEFUN([_AC_FUNC_CALLOC_IF],
                              # Guess yes on musl systems.
          *-musl* | midipix*) ac_cv_func_calloc_0_nonnull="guessing yes" ;;
                              # Guess yes on native Windows.
-         mingw*)             ac_cv_func_calloc_0_nonnull="guessing yes" ;;
+         mingw* | windows*)  ac_cv_func_calloc_0_nonnull="guessing yes" ;;
                              # If we don't know, obey --enable-cross-guesses.
          *)                  
ac_cv_func_calloc_0_nonnull="$gl_cross_guess_normal" ;;
        esac
diff --git a/gnulib/m4/clock_time.m4 b/gnulib/m4/clock_time.m4
index 28534db1c7..7ed718c003 100644
--- a/gnulib/m4/clock_time.m4
+++ b/gnulib/m4/clock_time.m4
@@ -1,4 +1,4 @@
-# clock_time.m4 serial 13
+# clock_time.m4 serial 14
 dnl Copyright (C) 2002-2006, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -32,7 +32,7 @@ AC_DEFUN([gl_CLOCK_TIME],
   CLOCK_TIME_LIB=
   AC_SUBST([CLOCK_TIME_LIB])
   case "$host_os" in
-    mingw*)
+    mingw* | windows*)
       ac_cv_func_clock_getres=no
       ac_cv_func_clock_gettime=no
       ac_cv_func_clock_settime=no
diff --git a/gnulib/m4/dup2.m4 b/gnulib/m4/dup2.m4
index e1cc73e18d..876e0d8bd2 100644
--- a/gnulib/m4/dup2.m4
+++ b/gnulib/m4/dup2.m4
@@ -1,4 +1,4 @@
-#serial 27
+#serial 28
 dnl Copyright (C) 2002, 2005, 2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -67,7 +67,7 @@ AC_DEFUN([gl_FUNC_DUP2],
       ],
       [gl_cv_func_dup2_works=yes], [gl_cv_func_dup2_works=no],
       [case "$host_os" in
-         mingw*) # on this platform, dup2 always returns 0 for success
+         mingw* | windows*) # on this platform, dup2 always returns 0 for 
success
            gl_cv_func_dup2_works="guessing no" ;;
          cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0
            gl_cv_func_dup2_works="guessing no" ;;
diff --git a/gnulib/m4/fcntl-o.m4 b/gnulib/m4/fcntl-o.m4
index 59d558bdd4..2fc3d09ad7 100644
--- a/gnulib/m4/fcntl-o.m4
+++ b/gnulib/m4/fcntl-o.m4
@@ -1,4 +1,4 @@
-# fcntl-o.m4 serial 7
+# fcntl-o.m4 serial 8
 dnl Copyright (C) 2006, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -117,9 +117,9 @@ AC_DEFUN([gl_FCNTL_O_FLAGS],
          *) gl_cv_header_working_fcntl_h='no';;
         esac],
        [case "$host_os" in
-                  # Guess 'no' on native Windows.
-          mingw*) gl_cv_header_working_fcntl_h='no' ;;
-          *)      gl_cv_header_working_fcntl_h=cross-compiling ;;
+                             # Guess 'no' on native Windows.
+          mingw* | windows*) gl_cv_header_working_fcntl_h='no' ;;
+          *)                 gl_cv_header_working_fcntl_h=cross-compiling ;;
         esac
        ])
     ])
diff --git a/gnulib/m4/float_h.m4 b/gnulib/m4/float_h.m4
index 2f0c9c4ee9..95897cf17b 100644
--- a/gnulib/m4/float_h.m4
+++ b/gnulib/m4/float_h.m4
@@ -1,4 +1,4 @@
-# float_h.m4 serial 13
+# float_h.m4 serial 14
 dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -84,9 +84,11 @@ int main ()
                [gl_cv_func_itold_works="guessing no"],
                [gl_cv_func_itold_works="guessing yes"])
              ;;
-                   # Guess yes on native Windows.
-           mingw*) gl_cv_func_itold_works="guessing yes" ;;
-           *)      gl_cv_func_itold_works="guessing yes" ;;
+             # Guess yes on native Windows.
+           mingw* | windows*)
+             gl_cv_func_itold_works="guessing yes" ;;
+           *)
+             gl_cv_func_itold_works="guessing yes" ;;
          esac
         ])
     ])
diff --git a/gnulib/m4/fstat.m4 b/gnulib/m4/fstat.m4
index 7cb2edb001..382741f412 100644
--- a/gnulib/m4/fstat.m4
+++ b/gnulib/m4/fstat.m4
@@ -1,4 +1,4 @@
-# fstat.m4 serial 8
+# fstat.m4 serial 9
 dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -10,7 +10,7 @@ AC_DEFUN([gl_FUNC_FSTAT],
   AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
 
   case "$host_os" in
-    mingw* | solaris*)
+    mingw* | windows* | solaris*)
       dnl On MinGW, the original stat() returns st_atime, st_mtime,
       dnl st_ctime values that are affected by the time zone.
       dnl Solaris stat can return a negative tv_nsec.
diff --git a/gnulib/m4/getopt.m4 b/gnulib/m4/getopt.m4
index 7981a09552..b136ce9537 100644
--- a/gnulib/m4/getopt.m4
+++ b/gnulib/m4/getopt.m4
@@ -1,4 +1,4 @@
-# getopt.m4 serial 48
+# getopt.m4 serial 49
 dnl Copyright (C) 2002-2006, 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -197,8 +197,8 @@ main ()
           fi
         else
           case "$host_os" in
-            darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";;
-            *)                       gl_cv_func_getopt_posix="guessing yes";;
+            darwin* | aix* | mingw* | windows*) 
gl_cv_func_getopt_posix="guessing no";;
+            *)                                  
gl_cv_func_getopt_posix="guessing yes";;
           esac
         fi
       ])
diff --git a/gnulib/m4/getrandom.m4 b/gnulib/m4/getrandom.m4
index 7b7f9ce2ee..fd73191b7b 100644
--- a/gnulib/m4/getrandom.m4
+++ b/gnulib/m4/getrandom.m4
@@ -1,4 +1,4 @@
-# getrandom.m4 serial 11
+# getrandom.m4 serial 12
 dnl Copyright 2020-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -45,7 +45,7 @@ AC_DEFUN([gl_FUNC_GETRANDOM],
   fi
 
   case "$host_os" in
-    mingw*)
+    mingw* | windows*)
       AC_CHECK_HEADERS([bcrypt.h], [], [],
         [[#include <windows.h>
         ]])
diff --git a/gnulib/m4/gnulib-common.m4 b/gnulib/m4/gnulib-common.m4
index 2426eb6398..c372316135 100644
--- a/gnulib/m4/gnulib-common.m4
+++ b/gnulib/m4/gnulib-common.m4
@@ -1,4 +1,4 @@
-# gnulib-common.m4 serial 87
+# gnulib-common.m4 serial 88
 dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -466,11 +466,25 @@ AC_DEFUN([gl_COMMON_BODY], [
 /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
  */
 /* Applies to: functions.  */
+/* After a function's parameter list, this attribute must come first, before
+   other attributes.  */
 #ifndef _GL_ATTRIBUTE_NOTHROW
-# if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus
-#  define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+# if defined __cplusplus
+#  if _GL_GNUC_PREREQ (2, 8) || __clang_major >= 4
+#   if __cplusplus >= 201103L
+#    define _GL_ATTRIBUTE_NOTHROW noexcept (true)
+#   else
+#    define _GL_ATTRIBUTE_NOTHROW throw ()
+#   endif
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
 # else
-#  define _GL_ATTRIBUTE_NOTHROW
+#  if _GL_HAS_ATTRIBUTE (nothrow)
+#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
 # endif
 #endif
 
diff --git a/gnulib/m4/gnulib-comp.m4 b/gnulib/m4/gnulib-comp.m4
index 4230068615..50234dca55 100644
--- a/gnulib/m4/gnulib-comp.m4
+++ b/gnulib/m4/gnulib-comp.m4
@@ -43,6 +43,7 @@ AC_DEFUN([gl_EARLY],
   AC_REQUIRE([gl_PROG_AR_RANLIB])
 
   # Code from module absolute-header:
+  # Code from module alignasof:
   # Code from module alloca-opt:
   # Code from module argz:
   # Code from module assert-h:
@@ -105,6 +106,7 @@ AC_DEFUN([gl_EARLY],
   # Code from module iswblank:
   # Code from module iswctype:
   # Code from module iswdigit:
+  # Code from module iswpunct:
   # Code from module iswxdigit:
   # Code from module langinfo:
   # Code from module largefile:
@@ -253,6 +255,7 @@ AC_DEFUN([gl_INIT],
   gl_COMMON
   gl_source_base='gnulib/lib'
   gl_source_base_prefix=
+  gl_ALIGNASOF
   gl_FUNC_ALLOCA
   gl_CONDITIONAL_HEADER([alloca.h])
   AC_PROG_MKDIR_P
@@ -408,6 +411,10 @@ AC_DEFUN([gl_INIT],
   gl_CONDITIONAL([GL_COND_OBJ_ISWDIGIT],
                  [! { test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; } 
&& test $REPLACE_ISWDIGIT = 1])
   gl_WCTYPE_MODULE_INDICATOR([iswdigit])
+  gl_FUNC_ISWPUNCT
+  gl_CONDITIONAL([GL_COND_OBJ_ISWPUNCT],
+                 [! { test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; } 
&& test $REPLACE_ISWPUNCT = 1])
+  gl_WCTYPE_MODULE_INDICATOR([iswpunct])
   gl_FUNC_ISWXDIGIT
   gl_CONDITIONAL([GL_COND_OBJ_ISWXDIGIT],
                  [! { test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; } 
&& test $REPLACE_ISWXDIGIT = 1])
@@ -940,7 +947,7 @@ AC_DEFUN([gl_INIT],
       gl_CONDITIONAL([GL_COND_OBJ_FSTAT], [test $REPLACE_FSTAT = 1])
       AM_COND_IF([GL_COND_OBJ_FSTAT], [
         case "$host_os" in
-          mingw*)
+          mingw* | windows*)
             AC_LIBOBJ([stat-w32])
             ;;
         esac
@@ -991,7 +998,7 @@ AC_DEFUN([gl_INIT],
       if test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1; then
         func_gl_gnulib_m4code_deb6c5f14b16306a85c59bccf4d416d8
       fi
-      if case $host_os in mingw*) false;; *) test $HAVE_GETRANDOM = 0 || test 
$REPLACE_GETRANDOM = 1;; esac; then
+      if case $host_os in mingw* | windows*) false;; *) test $HAVE_GETRANDOM = 
0 || test $REPLACE_GETRANDOM = 1;; esac; then
         func_gl_gnulib_m4code_open
       fi
       func_gl_gnulib_m4code_sys_random
@@ -1294,7 +1301,7 @@ AC_DEFUN([gl_INIT],
       gl_CONDITIONAL([GL_COND_OBJ_STAT], [test $REPLACE_STAT = 1])
       AM_COND_IF([GL_COND_OBJ_STAT], [
         case "$host_os" in
-          mingw*)
+          mingw* | windows*)
             AC_LIBOBJ([stat-w32])
             ;;
         esac
@@ -1486,7 +1493,7 @@ AC_DEFUN([gl_INIT],
     if $gl_gnulib_enabled_503a4cb75d69c787103d0aa2ab7d8440; then :; else
       AC_REQUIRE([AC_CANONICAL_HOST])
       gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_MUTEX],
-                     [case "$host_os" in mingw*) true;; *) false;; esac])
+                     [case "$host_os" in mingw* | windows*) true;; *) false;; 
esac])
       gl_gnulib_enabled_503a4cb75d69c787103d0aa2ab7d8440=true
     fi
   }
@@ -1495,7 +1502,7 @@ AC_DEFUN([gl_INIT],
     if $gl_gnulib_enabled_68a4501daeca58988392c7e60b4917ab; then :; else
       AC_REQUIRE([AC_CANONICAL_HOST])
       gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_ONCE],
-                     [case "$host_os" in mingw*) true;; *) false;; esac])
+                     [case "$host_os" in mingw* | windows*) true;; *) false;; 
esac])
       gl_gnulib_enabled_68a4501daeca58988392c7e60b4917ab=true
     fi
   }
@@ -1504,7 +1511,7 @@ AC_DEFUN([gl_INIT],
     if $gl_gnulib_enabled_f0efff84a70f4afba30902bb8ffe9354; then :; else
       AC_REQUIRE([AC_CANONICAL_HOST])
       gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_RECMUTEX],
-                     [case "$host_os" in mingw*) true;; *) false;; esac])
+                     [case "$host_os" in mingw* | windows*) true;; *) false;; 
esac])
       gl_gnulib_enabled_f0efff84a70f4afba30902bb8ffe9354=true
     fi
   }
@@ -1513,7 +1520,7 @@ AC_DEFUN([gl_INIT],
     if $gl_gnulib_enabled_8bb827fe37eaccf1b97feb0c87bc92ef; then :; else
       AC_REQUIRE([AC_CANONICAL_HOST])
       gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_RWLOCK],
-                     [case "$host_os" in mingw*) true;; *) false;; esac])
+                     [case "$host_os" in mingw* | windows*) true;; *) false;; 
esac])
       gl_gnulib_enabled_8bb827fe37eaccf1b97feb0c87bc92ef=true
     fi
   }
@@ -1990,6 +1997,7 @@ AC_DEFUN([gl_FILE_LIST], [
   lib/iswctype-impl.h
   lib/iswctype.c
   lib/iswdigit.c
+  lib/iswpunct.c
   lib/iswxdigit.c
   lib/itold.c
   lib/langinfo.in.h
@@ -2215,6 +2223,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/iswblank.m4
   m4/iswctype.m4
   m4/iswdigit.m4
+  m4/iswpunct.m4
   m4/iswxdigit.m4
   m4/langinfo_h.m4
   m4/largefile.m4
@@ -2274,6 +2283,7 @@ AC_DEFUN([gl_FILE_LIST], [
   m4/stat-time.m4
   m4/stat.m4
   m4/std-gnu11.m4
+  m4/stdalign.m4
   m4/stdarg.m4
   m4/stddef_h.m4
   m4/stdint.m4
diff --git a/gnulib/m4/iswdigit.m4 b/gnulib/m4/iswdigit.m4
index 54a2943ead..b0572819ce 100644
--- a/gnulib/m4/iswdigit.m4
+++ b/gnulib/m4/iswdigit.m4
@@ -1,4 +1,4 @@
-# iswdigit.m4 serial 4
+# iswdigit.m4 serial 5
 dnl Copyright (C) 2020-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -25,7 +25,7 @@ AC_DEFUN([gl_FUNC_ISWDIGIT],
 changequote(,)dnl
        case "$host_os" in
          # Guess no on FreeBSD, NetBSD, Solaris, native Windows.
-         freebsd* | dragonfly* | netbsd* | solaris* | mingw*)
+         freebsd* | dragonfly* | netbsd* | solaris* | mingw* | windows*)
            gl_cv_func_iswdigit_works="guessing no" ;;
          # Guess yes otherwise.
          *) gl_cv_func_iswdigit_works="guessing yes" ;;
diff --git a/gnulib/m4/iswpunct.m4 b/gnulib/m4/iswpunct.m4
new file mode 100644
index 0000000000..14691154cf
--- /dev/null
+++ b/gnulib/m4/iswpunct.m4
@@ -0,0 +1,47 @@
+# iswpunct.m4 serial 1
+dnl Copyright (C) 2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_ISWPUNCT],
+[
+  AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
+  AC_REQUIRE([gl_WCTYPE_H])
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+    dnl <wctype.h> redefines iswpunct already.
+    REPLACE_ISWPUNCT="$REPLACE_ISWCNTRL"
+  else
+    AC_CACHE_CHECK([whether iswpunct is consistent with ispunct],
+      [gl_cv_func_iswpunct_works],
+      [AC_RUN_IFELSE(
+         [AC_LANG_SOURCE([[
+#include <ctype.h>
+#include <wchar.h>
+#include <wctype.h>
+int
+main (int argc, char *argv[])
+{
+  int result = 0;
+  /* This fails on Android 11.  */
+  if ((! iswpunct ('\`')) != (! ispunct ('\`')))
+    result |= 1;
+  return result;
+}]])],
+         [gl_cv_func_iswpunct_works=yes],
+         [gl_cv_func_iswpunct_works=no],
+         [case "$host_os" in
+            # Guess no on Android.
+            android*) gl_cv_func_iswpunct_works="guessing no" ;;
+            # Guess yes otherwise.
+            *)        gl_cv_func_iswpunct_works="guessing yes" ;;
+          esac
+         ])
+      ])
+    case "$gl_cv_func_iswpunct_works" in
+      *yes) ;;
+      *) REPLACE_ISWPUNCT=1 ;;
+    esac
+  fi
+])
diff --git a/gnulib/m4/iswxdigit.m4 b/gnulib/m4/iswxdigit.m4
index a16b10aed3..7321807bc6 100644
--- a/gnulib/m4/iswxdigit.m4
+++ b/gnulib/m4/iswxdigit.m4
@@ -1,4 +1,4 @@
-# iswxdigit.m4 serial 4
+# iswxdigit.m4 serial 5
 dnl Copyright (C) 2020-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -24,7 +24,7 @@ AC_DEFUN([gl_FUNC_ISWXDIGIT],
 changequote(,)dnl
        case "$host_os" in
          # Guess no on FreeBSD, NetBSD, Solaris, native Windows.
-         freebsd* | dragonfly* | netbsd* | solaris* | mingw*)
+         freebsd* | dragonfly* | netbsd* | solaris* | mingw* | windows*)
            gl_cv_func_iswxdigit_works="guessing no" ;;
          # Guess yes otherwise.
          *) gl_cv_func_iswxdigit_works="guessing yes" ;;
diff --git a/gnulib/m4/largefile.m4 b/gnulib/m4/largefile.m4
index 8b051c0042..7e65d72fea 100644
--- a/gnulib/m4/largefile.m4
+++ b/gnulib/m4/largefile.m4
@@ -247,7 +247,7 @@ AC_DEFUN([_AC_SYS_LARGEFILE_PROBE],
     AC_REQUIRE([AC_CANONICAL_HOST])
     if test $ac_opt_found != yes; then
       AS_CASE([$host_os],
-        [mingw*],
+        [mingw* | windows*],
           [ac_cv_sys_largefile_opts="supported through gnulib"
            ac_opt_found=yes]
       )
@@ -305,7 +305,7 @@ AC_DEFUN([gl_LARGEFILE],
 [
   AC_REQUIRE([AC_CANONICAL_HOST])
   case "$host_os" in
-    mingw*)
+    mingw* | windows*)
       dnl Native Windows.
       dnl mingw64 defines off_t to a 64-bit type already, if
       dnl _FILE_OFFSET_BITS=64, which is ensured by AC_SYS_LARGEFILE.
diff --git a/gnulib/m4/lib-ld.m4 b/gnulib/m4/lib-ld.m4
index acc6127435..70ca4a2e1d 100644
--- a/gnulib/m4/lib-ld.m4
+++ b/gnulib/m4/lib-ld.m4
@@ -1,4 +1,4 @@
-# lib-ld.m4 serial 11
+# lib-ld.m4 serial 12
 dnl Copyright (C) 1996-2003, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -67,7 +67,7 @@ else
     if test "$GCC" = yes; then
       # Check if gcc -print-prog-name=ld gives a path.
       case $host in
-        *-*-mingw*)
+        *-*-mingw* | windows*)
           # gcc leaves a trailing carriage return which upsets mingw
           acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
         *)
diff --git a/gnulib/m4/locale-fr.m4 b/gnulib/m4/locale-fr.m4
index 40b13aeaa7..ac1c7217da 100644
--- a/gnulib/m4/locale-fr.m4
+++ b/gnulib/m4/locale-fr.m4
@@ -1,4 +1,4 @@
-# locale-fr.m4 serial 22
+# locale-fr.m4 serial 23
 dnl Copyright (C) 2003, 2005-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -86,7 +86,7 @@ int main () {
         # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
         # "ja" as "Japanese" or "Japanese_Japan.932",
         # and similar.
-        mingw*)
+        mingw* | windows*)
           # Test for the native Windows locale name.
           if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 
2>/dev/null; then
             gt_cv_locale_fr=French_France.1252
@@ -228,7 +228,7 @@ int main () {
             # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
             # "ja" as "Japanese" or "Japanese_Japan.932",
             # and similar.
-            mingw*)
+            mingw* | windows*)
               # Test for the hypothetical native Windows locale name.
               if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; 
exit) 2>/dev/null; then
                 gt_cv_locale_fr_utf8=French_France.65001
diff --git a/gnulib/m4/locale-ja.m4 b/gnulib/m4/locale-ja.m4
index a400b75763..4350010cba 100644
--- a/gnulib/m4/locale-ja.m4
+++ b/gnulib/m4/locale-ja.m4
@@ -1,4 +1,4 @@
-# locale-ja.m4 serial 17
+# locale-ja.m4 serial 18
 dnl Copyright (C) 2003, 2005-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -90,7 +90,7 @@ int main ()
         # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
         # "ja" as "Japanese" or "Japanese_Japan.932",
         # and similar.
-        mingw*)
+        mingw* | windows*)
           # Note that on native Windows, the Japanese locale is
           # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we
           # cannot use it here.
diff --git a/gnulib/m4/locale-zh.m4 b/gnulib/m4/locale-zh.m4
index 8cb7b5e519..10a2b5875a 100644
--- a/gnulib/m4/locale-zh.m4
+++ b/gnulib/m4/locale-zh.m4
@@ -1,4 +1,4 @@
-# locale-zh.m4 serial 17
+# locale-zh.m4 serial 18
 dnl Copyright (C) 2003, 2005-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -91,7 +91,7 @@ int main ()
         # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
         # "ja" as "Japanese" or "Japanese_Japan.932",
         # and similar.
-        mingw*)
+        mingw* | windows*)
           # Test for the hypothetical native Windows locale name.
           if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 
2>/dev/null; then
             gt_cv_locale_zh_CN=Chinese_China.54936
diff --git a/gnulib/m4/locale_h.m4 b/gnulib/m4/locale_h.m4
index a33a0a4661..f7281ac0c8 100644
--- a/gnulib/m4/locale_h.m4
+++ b/gnulib/m4/locale_h.m4
@@ -1,4 +1,4 @@
-# locale_h.m4 serial 28
+# locale_h.m4 serial 29
 dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -59,7 +59,12 @@ AC_DEFUN_ONCE([gl_LOCALE_H],
     dnl On native Windows with MSVC, merely define these member names as 
macros.
     dnl This avoids trouble in C++ mode.
     case "$host_os" in
-      mingw*)
+      windows*-gnu*)
+        REPLACE_STRUCT_LCONV=1
+        ;;
+      windows*-msvc*)
+        ;;
+      mingw* | windows*)
         AC_EGREP_CPP([Special], [
 #ifdef _MSC_VER
  Special
diff --git a/gnulib/m4/localeconv.m4 b/gnulib/m4/localeconv.m4
index 374dcbf54f..b9d8c1b113 100644
--- a/gnulib/m4/localeconv.m4
+++ b/gnulib/m4/localeconv.m4
@@ -1,4 +1,4 @@
-# localeconv.m4 serial 2
+# localeconv.m4 serial 3
 dnl Copyright (C) 2012-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -36,7 +36,7 @@ AC_DEFUN([gl_FUNC_LOCALECONV],
                                 # Guess yes on musl systems.
             *-musl* | midipix*) gl_cv_func_localeconv_works="guessing yes" ;;
                                 # Guess no on native Windows.
-            mingw*)             gl_cv_func_localeconv_works="guessing no" ;;
+            mingw* | windows*)  gl_cv_func_localeconv_works="guessing no" ;;
                                 # If we don't know, obey 
--enable-cross-guesses.
             *)                  
gl_cv_func_localeconv_works="$gl_cross_guess_normal" ;;
           esac
diff --git a/gnulib/m4/lstat.m4 b/gnulib/m4/lstat.m4
index 2bc4669793..977386348a 100644
--- a/gnulib/m4/lstat.m4
+++ b/gnulib/m4/lstat.m4
@@ -1,4 +1,4 @@
-# serial 34
+# serial 35
 
 # Copyright (C) 1997-2001, 2003-2023 Free Software Foundation, Inc.
 #
@@ -62,7 +62,7 @@ AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK],
           *-gnu* | gnu*)
             # Guess yes on glibc systems.
             gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;;
-          mingw*)
+          mingw* | windows*)
             # Guess no on native Windows.
             gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;;
           *)
diff --git a/gnulib/m4/malloc.m4 b/gnulib/m4/malloc.m4
index bc580176f5..096c262b17 100644
--- a/gnulib/m4/malloc.m4
+++ b/gnulib/m4/malloc.m4
@@ -1,4 +1,4 @@
-# malloc.m4 serial 29
+# malloc.m4 serial 30
 dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -26,7 +26,7 @@ AC_DEFUN([_AC_FUNC_MALLOC_IF],
           # Guess yes on platforms where we know the result.
           *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
           | gnu* | *-musl* | midipix* | midnightbsd* \
-          | hpux* | solaris* | cygwin* | mingw* | msys* )
+          | hpux* | solaris* | cygwin* | mingw* | windows* | msys* )
             ac_cv_func_malloc_0_nonnull="guessing yes" ;;
           # If we don't know, obey --enable-cross-guesses.
           *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;;
@@ -128,7 +128,7 @@ AC_DEFUN([gl_CHECK_MALLOC_POSIX],
       dnl except on those platforms where we have seen 'test-malloc-gnu',
       dnl 'test-realloc-gnu', 'test-calloc-gnu' fail.
       case "$host_os" in
-        mingw*)
+        mingw* | windows*)
           gl_cv_func_malloc_posix=no ;;
         irix* | solaris*)
           dnl On IRIX 6.5, the three functions return NULL with errno unset
diff --git a/gnulib/m4/math_h.m4 b/gnulib/m4/math_h.m4
index d2e90ff1eb..c214f8efa8 100644
--- a/gnulib/m4/math_h.m4
+++ b/gnulib/m4/math_h.m4
@@ -1,4 +1,4 @@
-# math_h.m4 serial 125
+# math_h.m4 serial 126
 dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -125,6 +125,7 @@ AC_DEFUN([gl_MATH_H_REQUIRE_DEFAULTS],
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNANF])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNAND])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNANL])
+    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXP])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXPF])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXPL])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG])
@@ -319,6 +320,7 @@ AC_DEFUN([gl_MATH_H_DEFAULTS],
   REPLACE_ISFINITE=0;               AC_SUBST([REPLACE_ISFINITE])
   REPLACE_ISINF=0;                  AC_SUBST([REPLACE_ISINF])
   REPLACE_ISNAN=0;                  AC_SUBST([REPLACE_ISNAN])
+  REPLACE_LDEXP=0;                  AC_SUBST([REPLACE_LDEXP])
   REPLACE_LDEXPL=0;                 AC_SUBST([REPLACE_LDEXPL])
   REPLACE_LOG=0;                    AC_SUBST([REPLACE_LOG])
   REPLACE_LOGF=0;                   AC_SUBST([REPLACE_LOGF])
diff --git a/gnulib/m4/mbrtoc32.m4 b/gnulib/m4/mbrtoc32.m4
index 25196039bb..361c9f8380 100644
--- a/gnulib/m4/mbrtoc32.m4
+++ b/gnulib/m4/mbrtoc32.m4
@@ -1,4 +1,4 @@
-# mbrtoc32.m4 serial 17
+# mbrtoc32.m4 serial 18
 dnl Copyright (C) 2014-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -105,13 +105,13 @@ AC_DEFUN([gl_MBRTOC32_EMPTY_INPUT],
         [gl_cv_func_mbrtoc32_empty_input=yes],
         [gl_cv_func_mbrtoc32_empty_input=no],
         [case "$host_os" in
-                            # Guess no on glibc systems.
-           *-gnu* | gnu*)   gl_cv_func_mbrtoc32_empty_input="guessing no" ;;
-                            # Guess no on Android.
-           linux*-android*) gl_cv_func_mbrtoc32_empty_input="guessing no" ;;
-                            # Guess no on native Windows.
-           mingw*)          gl_cv_func_mbrtoc32_empty_input="guessing no" ;;
-           *)               gl_cv_func_mbrtoc32_empty_input="guessing yes" ;;
+                              # Guess no on glibc systems.
+           *-gnu* | gnu*)     gl_cv_func_mbrtoc32_empty_input="guessing no" ;;
+                              # Guess no on Android.
+           linux*-android*)   gl_cv_func_mbrtoc32_empty_input="guessing no" ;;
+                              # Guess no on native Windows.
+           mingw* | windows*) gl_cv_func_mbrtoc32_empty_input="guessing no" ;;
+           *)                 gl_cv_func_mbrtoc32_empty_input="guessing yes" ;;
          esac
         ])
     ])
@@ -154,9 +154,9 @@ AC_DEFUN([gl_MBRTOC32_C_LOCALE],
        [gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ=yes],
        [gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ=no],
        [case "$host_os" in
-                  # Guess yes on native Windows.
-          mingw*) gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ="guessing yes" ;;
-          *)      
gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ="$gl_cross_guess_normal" ;;
+                             # Guess yes on native Windows.
+          mingw* | windows*) 
gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ="guessing yes" ;;
+          *)                 
gl_cv_func_mbrtoc32_C_locale_sans_EILSEQ="$gl_cross_guess_normal" ;;
         esac
        ])
     ])
@@ -184,7 +184,7 @@ AC_DEFUN([gl_MBRTOC32_SANITYCHECK],
 changequote(,)dnl
         case "$host_os" in
           # Guess no on FreeBSD, Solaris, native Windows.
-          freebsd* | midnightbsd* | solaris* | mingw*)
+          freebsd* | midnightbsd* | solaris* | mingw* | windows*)
             gl_cv_func_mbrtoc32_sanitycheck="guessing no"
             ;;
           # Guess yes otherwise.
diff --git a/gnulib/m4/mbrtowc.m4 b/gnulib/m4/mbrtowc.m4
index 430e9ad832..ea0789510f 100644
--- a/gnulib/m4/mbrtowc.m4
+++ b/gnulib/m4/mbrtowc.m4
@@ -1,4 +1,4 @@
-# mbrtowc.m4 serial 43  -*- coding: utf-8 -*-
+# mbrtowc.m4 serial 44  -*- coding: utf-8 -*-
 dnl Copyright (C) 2001-2002, 2004-2005, 2008-2023 Free Software Foundation,
 dnl Inc.
 dnl This file is free software; the Free Software Foundation
@@ -91,7 +91,9 @@ AC_DEFUN([gl_FUNC_MBRTOWC],
   fi
   if test $REPLACE_MBSTATE_T = 1; then
     case "$host_os" in
-      mingw*) MBRTOWC_LIB= ;;
+      mingw* | windows*)
+        MBRTOWC_LIB=
+        ;;
       *)
         gl_WEAK_SYMBOLS
         case "$gl_cv_have_weak" in
@@ -129,7 +131,7 @@ AC_DEFUN_ONCE([gl_MBSTATE_T_BROKEN],
   dnl to override it, even if - like on MSVC - mbsinit() is only defined as
   dnl an inline function, not as a global function.
   if case "$host_os" in
-       mingw*) true ;;
+       mingw* | windows*) true ;;
        *) test $ac_cv_func_mbsinit = yes ;;
      esac \
     && test $ac_cv_func_mbrtowc = yes; then
@@ -411,14 +413,16 @@ AC_DEFUN([gl_MBRTOWC_RETVAL],
       dnl is present.
 changequote(,)dnl
       case "$host_os" in
-                                   # Guess no on HP-UX, Solaris, native 
Windows.
-        hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;;
-                                   # Guess yes otherwise.
-        *)                         gl_cv_func_mbrtowc_retval="guessing yes" ;;
+          # Guess no on HP-UX, Solaris, native Windows.
+        hpux* | solaris* | mingw* | windows*)
+          gl_cv_func_mbrtowc_retval="guessing no" ;;
+          # Guess yes otherwise.
+        *)
+          gl_cv_func_mbrtowc_retval="guessing yes" ;;
       esac
 changequote([,])dnl
       if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \
-         || { case "$host_os" in mingw*) true;; *) false;; esac; }; then
+         || { case "$host_os" in mingw* | windows*) true;; *) false;; esac; }; 
then
         AC_RUN_IFELSE(
           [AC_LANG_SOURCE([[
 #include <locale.h>
@@ -582,13 +586,13 @@ AC_DEFUN([gl_MBRTOWC_STORES_INCOMPLETE],
      dnl is present.
 changequote(,)dnl
      case "$host_os" in
-               # Guess yes on native Windows.
-       mingw*) gl_cv_func_mbrtowc_stores_incomplete="guessing yes" ;;
-       *)      gl_cv_func_mbrtowc_stores_incomplete="guessing no" ;;
+                          # Guess yes on native Windows.
+       mingw* | windows*) gl_cv_func_mbrtowc_stores_incomplete="guessing yes" 
;;
+       *)                 gl_cv_func_mbrtowc_stores_incomplete="guessing no" ;;
      esac
 changequote([,])dnl
      case "$host_os" in
-       mingw*)
+       mingw* | windows*)
          AC_RUN_IFELSE(
            [AC_LANG_SOURCE([[
 #include <locale.h>
@@ -700,7 +704,7 @@ AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT],
                                 # Guess no on Android.
           linux*-android*)      gl_cv_func_mbrtowc_empty_input="guessing no" ;;
                                 # Guess no on native Windows.
-          mingw*)               gl_cv_func_mbrtowc_empty_input="guessing no" ;;
+          mingw* | windows*)    gl_cv_func_mbrtowc_empty_input="guessing no" ;;
           *)                    gl_cv_func_mbrtowc_empty_input="guessing yes" 
;;
         esac
        ])
@@ -745,9 +749,9 @@ AC_DEFUN([gl_MBRTOWC_C_LOCALE],
        [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes],
        [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=no],
        [case "$host_os" in
-                  # Guess yes on native Windows.
-          mingw*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;;
-          *)      
gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal" ;;
+                             # Guess yes on native Windows.
+          mingw* | windows*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing 
yes" ;;
+          *)                 
gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal" ;;
         esac
        ])
     ])
diff --git a/gnulib/m4/mbsinit.m4 b/gnulib/m4/mbsinit.m4
index c388a8b9a1..8d10569f64 100644
--- a/gnulib/m4/mbsinit.m4
+++ b/gnulib/m4/mbsinit.m4
@@ -1,4 +1,4 @@
-# mbsinit.m4 serial 9
+# mbsinit.m4 serial 10
 dnl Copyright (C) 2008, 2010-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -32,7 +32,7 @@ AC_DEFUN([gl_FUNC_MBSINIT],
       dnl states produced by mbrtowc() for an incomplete multibyte character
       dnl in multibyte locales.
       case "$host_os" in
-        mingw*) REPLACE_MBSINIT=1 ;;
+        mingw* | windows*) REPLACE_MBSINIT=1 ;;
       esac
     fi
   fi
diff --git a/gnulib/m4/memchr.m4 b/gnulib/m4/memchr.m4
index 4f1aed0167..1523f19e09 100644
--- a/gnulib/m4/memchr.m4
+++ b/gnulib/m4/memchr.m4
@@ -1,4 +1,4 @@
-# memchr.m4 serial 18
+# memchr.m4 serial 19
 dnl Copyright (C) 2002-2004, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -85,12 +85,12 @@ AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
        [gl_cv_func_memchr_works=yes],
        [gl_cv_func_memchr_works=no],
        [case "$host_os" in
-                           # Guess no on Android.
-          linux*-android*) gl_cv_func_memchr_works="guessing no" ;;
-                           # Guess yes on native Windows.
-          mingw*)          gl_cv_func_memchr_works="guessing yes" ;;
-                           # If we don't know, obey --enable-cross-guesses.
-          *)               gl_cv_func_memchr_works="$gl_cross_guess_normal" ;;
+                             # Guess no on Android.
+          linux*-android*)   gl_cv_func_memchr_works="guessing no" ;;
+                             # Guess yes on native Windows.
+          mingw* | windows*) gl_cv_func_memchr_works="guessing yes" ;;
+                             # If we don't know, obey --enable-cross-guesses.
+          *)                 gl_cv_func_memchr_works="$gl_cross_guess_normal" 
;;
         esac
        ])
     ])
diff --git a/gnulib/m4/mkdir.m4 b/gnulib/m4/mkdir.m4
index c2bc4da7ca..79c5e2c740 100644
--- a/gnulib/m4/mkdir.m4
+++ b/gnulib/m4/mkdir.m4
@@ -1,4 +1,4 @@
-# serial 18
+# serial 19
 
 # Copyright (C) 2001, 2003-2004, 2006, 2008-2023 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
@@ -25,23 +25,25 @@ AC_DEFUN([gl_FUNC_MKDIR],
        [gl_cv_func_mkdir_trailing_slash_works=yes],
        [gl_cv_func_mkdir_trailing_slash_works=no],
        [case "$host_os" in
-                           # Guess yes on Linux systems.
-          linux-* | linux) gl_cv_func_mkdir_trailing_slash_works="guessing 
yes" ;;
-                           # Guess yes on systems that emulate the Linux 
system calls.
-          midipix*)        gl_cv_func_mkdir_trailing_slash_works="guessing 
yes" ;;
-                           # Guess yes on glibc systems.
-          *-gnu* | gnu*)   gl_cv_func_mkdir_trailing_slash_works="guessing 
yes" ;;
-                           # Guess yes on MSVC, no on mingw.
-          mingw*)          AC_EGREP_CPP([Known], [
+                             # Guess yes on Linux systems.
+          linux-* | linux)   gl_cv_func_mkdir_trailing_slash_works="guessing 
yes" ;;
+                             # Guess yes on systems that emulate the Linux 
system calls.
+          midipix*)          gl_cv_func_mkdir_trailing_slash_works="guessing 
yes" ;;
+                             # Guess yes on glibc systems.
+          *-gnu* | gnu*)     gl_cv_func_mkdir_trailing_slash_works="guessing 
yes" ;;
+                             # Guess yes on MSVC, no on mingw.
+          windows*-gnu*)     gl_cv_func_mkdir_trailing_slash_works="guessing 
no" ;;
+          windows*-msvc*)    gl_cv_func_mkdir_trailing_slash_works="guessing 
yes" ;;
+          mingw* | windows*) AC_EGREP_CPP([Known], [
 #ifdef _MSC_VER
  Known
 #endif
-                             ],
-                             [gl_cv_func_mkdir_trailing_slash_works="guessing 
yes"],
-                             [gl_cv_func_mkdir_trailing_slash_works="guessing 
no"])
-                           ;;
-                           # If we don't know, obey --enable-cross-guesses.
-          *)               
gl_cv_func_mkdir_trailing_slash_works="$gl_cross_guess_normal" ;;
+                               ],
+                               
[gl_cv_func_mkdir_trailing_slash_works="guessing yes"],
+                               
[gl_cv_func_mkdir_trailing_slash_works="guessing no"])
+                             ;;
+                             # If we don't know, obey --enable-cross-guesses.
+          *)                 
gl_cv_func_mkdir_trailing_slash_works="$gl_cross_guess_normal" ;;
         esac
        ])
      rm -rf conftest.dir
@@ -65,16 +67,16 @@ AC_DEFUN([gl_FUNC_MKDIR],
        [gl_cv_func_mkdir_trailing_dot_works=yes],
        [gl_cv_func_mkdir_trailing_dot_works=no],
        [case "$host_os" in
-                         # Guess yes on glibc systems.
-          *-gnu* | gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;;
-                         # Guess yes on musl systems.
-          *-musl*)       gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;;
-                         # Guess yes on systems that emulate the Linux system 
calls.
-          midipix*)      gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;;
-                         # Guess no on native Windows.
-          mingw*)        gl_cv_func_mkdir_trailing_dot_works="guessing no" ;;
-                         # If we don't know, obey --enable-cross-guesses.
-          *)             
gl_cv_func_mkdir_trailing_dot_works="$gl_cross_guess_normal" ;;
+                             # Guess yes on glibc systems.
+          *-gnu* | gnu*)     gl_cv_func_mkdir_trailing_dot_works="guessing 
yes" ;;
+                             # Guess yes on musl systems.
+          *-musl*)           gl_cv_func_mkdir_trailing_dot_works="guessing 
yes" ;;
+                             # Guess yes on systems that emulate the Linux 
system calls.
+          midipix*)          gl_cv_func_mkdir_trailing_dot_works="guessing 
yes" ;;
+                             # Guess no on native Windows.
+          mingw* | windows*) gl_cv_func_mkdir_trailing_dot_works="guessing no" 
;;
+                             # If we don't know, obey --enable-cross-guesses.
+          *)                 
gl_cv_func_mkdir_trailing_dot_works="$gl_cross_guess_normal" ;;
         esac
        ])
      rm -rf conftest.dir
diff --git a/gnulib/m4/mkstemp.m4 b/gnulib/m4/mkstemp.m4
index d4a15ead33..40958a72c4 100644
--- a/gnulib/m4/mkstemp.m4
+++ b/gnulib/m4/mkstemp.m4
@@ -1,4 +1,4 @@
-#serial 29
+#serial 30
 
 # Copyright (C) 2001, 2003-2007, 2009-2023 Free Software Foundation, Inc.
 # This file is free software; the Free Software Foundation
@@ -63,7 +63,7 @@ AC_DEFUN([gl_FUNC_MKSTEMP],
                                  # Guess yes on musl systems.
              *-musl* | midipix*) gl_cv_func_working_mkstemp="guessing yes" ;;
                                  # Guess no on native Windows.
-             mingw*)             gl_cv_func_working_mkstemp="guessing no" ;;
+             mingw* | windows*)  gl_cv_func_working_mkstemp="guessing no" ;;
                                  # If we don't know, obey 
--enable-cross-guesses.
              *)                  
gl_cv_func_working_mkstemp="$gl_cross_guess_normal" ;;
            esac
diff --git a/gnulib/m4/open.m4 b/gnulib/m4/open.m4
index 94fa2bb753..b14fd013fc 100644
--- a/gnulib/m4/open.m4
+++ b/gnulib/m4/open.m4
@@ -1,4 +1,4 @@
-# open.m4 serial 15
+# open.m4 serial 16
 dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -9,7 +9,7 @@ AC_DEFUN([gl_FUNC_OPEN],
   AC_REQUIRE([AC_CANONICAL_HOST])
   AC_REQUIRE([gl_PREPROC_O_CLOEXEC])
   case "$host_os" in
-    mingw* | pw*)
+    mingw* | windows* | pw*)
       REPLACE_OPEN=1
       ;;
     *)
diff --git a/gnulib/m4/printf.m4 b/gnulib/m4/printf.m4
index 8b8f01067f..3be48277a6 100644
--- a/gnulib/m4/printf.m4
+++ b/gnulib/m4/printf.m4
@@ -1,4 +1,4 @@
-# printf.m4 serial 84
+# printf.m4 serial 85
 dnl Copyright (C) 2003, 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -86,7 +86,9 @@ changequote(,)dnl
            linux*-android*)      gl_cv_func_printf_sizes_c99="guessing yes";;
 changequote([,])dnl
                                  # Guess yes on MSVC, no on mingw.
-           mingw*)               AC_EGREP_CPP([Known], [
+           windows*-gnu*)        gl_cv_func_printf_sizes_c99="guessing no" ;;
+           windows*-msvc*)       gl_cv_func_printf_sizes_c99="guessing yes" ;;
+           mingw* | windows*)    AC_EGREP_CPP([Known], [
 #ifdef _MSC_VER
  Known
 #endif
@@ -179,7 +181,7 @@ int main ()
                                # Guess no on Android.
            linux*-android*)    gl_cv_func_printf_sizes_c23="guessing no";;
                                # Guess no on native Windows.
-           mingw*)             gl_cv_func_printf_sizes_c23="guessing no";;
+           mingw* | windows*)  gl_cv_func_printf_sizes_c23="guessing no";;
                                # If we don't know, obey --enable-cross-guesses.
            *)                  
gl_cv_func_printf_sizes_c23="$gl_cross_guess_normal";;
          esac
@@ -223,20 +225,22 @@ int main ()
         [gl_cv_func_printf_long_double=yes],
         [gl_cv_func_printf_long_double=no],
         [case "$host_os" in
-                            # Guess no on BeOS.
-           beos*)           gl_cv_func_printf_long_double="guessing no";;
-                            # Guess yes on Android.
-           linux*-android*) gl_cv_func_printf_long_double="guessing yes";;
-                            # Guess yes on MSVC, no on mingw.
-           mingw*)          AC_EGREP_CPP([Known], [
+                              # Guess no on BeOS.
+           beos*)             gl_cv_func_printf_long_double="guessing no";;
+                              # Guess yes on Android.
+           linux*-android*)   gl_cv_func_printf_long_double="guessing yes";;
+                              # Guess yes on MSVC, no on mingw.
+           windows*-gnu*)     gl_cv_func_printf_long_double="guessing no" ;;
+           windows*-msvc*)    gl_cv_func_printf_long_double="guessing yes" ;;
+           mingw* | windows*) AC_EGREP_CPP([Known], [
 #ifdef _MSC_VER
  Known
 #endif
-                              ],
-                              [gl_cv_func_printf_long_double="guessing yes"],
-                              [gl_cv_func_printf_long_double="guessing no"])
-                            ;;
-           *)               gl_cv_func_printf_long_double="guessing yes";;
+                                ],
+                                [gl_cv_func_printf_long_double="guessing yes"],
+                                [gl_cv_func_printf_long_double="guessing no"])
+                              ;;
+           *)                 gl_cv_func_printf_long_double="guessing yes";;
          esac
         ])
     ])
@@ -354,7 +358,9 @@ changequote(,)dnl
            linux*-android*)      gl_cv_func_printf_infinite="guessing no";;
 changequote([,])dnl
                                  # Guess yes on MSVC, no on mingw.
-           mingw*)               AC_EGREP_CPP([Known], [
+           windows*-gnu*)        gl_cv_func_printf_infinite="guessing no" ;;
+           windows*-msvc*)       gl_cv_func_printf_infinite="guessing yes" ;;
+           mingw* | windows*)    AC_EGREP_CPP([Known], [
 #ifdef _MSC_VER
  Known
 #endif
@@ -568,7 +574,9 @@ changequote(,)dnl
                    linux*-android*)      
gl_cv_func_printf_infinite_long_double="guessing no";;
 changequote([,])dnl
                                          # Guess yes on MSVC, no on mingw.
-                   mingw*)               AC_EGREP_CPP([Known], [
+                   windows*-gnu*)        
gl_cv_func_printf_infinite_long_double="guessing no" ;;
+                   windows*-msvc*)       
gl_cv_func_printf_infinite_long_double="guessing yes" ;;
+                   mingw* | windows*)    AC_EGREP_CPP([Known], [
 #ifdef _MSC_VER
  Known
 #endif
@@ -681,7 +689,7 @@ int main ()
                                  # Guess no on Android.
            linux*-android*)      gl_cv_func_printf_directive_a="guessing no";;
                                  # Guess no on native Windows.
-           mingw*)               gl_cv_func_printf_directive_a="guessing no";;
+           mingw* | windows*)    gl_cv_func_printf_directive_a="guessing no";;
                                  # If we don't know, obey 
--enable-cross-guesses.
            *)                    
gl_cv_func_printf_directive_a="$gl_cross_guess_normal";;
          esac
@@ -736,7 +744,7 @@ int main ()
                                # Guess no on Android.
            linux*-android*)    gl_cv_func_printf_directive_b="guessing no";;
                                # Guess no on native Windows.
-           mingw*)             gl_cv_func_printf_directive_b="guessing no";;
+           mingw* | windows*)  gl_cv_func_printf_directive_b="guessing no";;
                                # If we don't know, obey --enable-cross-guesses.
            *)                  
gl_cv_func_printf_directive_b="$gl_cross_guess_normal";;
          esac
@@ -791,7 +799,7 @@ int main ()
                                # Guess no on Android.
            linux*-android*)    
gl_cv_func_printf_directive_uppercase_b="guessing no";;
                                # Guess no on native Windows.
-           mingw*)             
gl_cv_func_printf_directive_uppercase_b="guessing no";;
+           mingw* | windows*)  
gl_cv_func_printf_directive_uppercase_b="guessing no";;
                                # If we don't know, obey --enable-cross-guesses.
            *)                  
gl_cv_func_printf_directive_uppercase_b="$gl_cross_guess_normal";;
          esac
@@ -857,7 +865,9 @@ changequote(,)dnl
            linux*-android*)      gl_cv_func_printf_directive_f="guessing no";;
 changequote([,])dnl
                                  # Guess yes on MSVC, no on mingw.
-           mingw*)               AC_EGREP_CPP([Known], [
+           windows*-gnu*)        gl_cv_func_printf_directive_f="guessing no" ;;
+           windows*-msvc*)       gl_cv_func_printf_directive_f="guessing yes" 
;;
+           mingw* | windows*)    AC_EGREP_CPP([Known], [
 #ifdef _MSC_VER
  Known
 #endif
@@ -923,21 +933,21 @@ int main ()
         [gl_cv_func_printf_directive_n=yes],
         [gl_cv_func_printf_directive_n=no],
         [case "$host_os" in
-                            # Guess no on glibc when _FORTIFY_SOURCE >= 2.
-           *-gnu* | gnu*)   AC_COMPILE_IFELSE(
-                              [AC_LANG_SOURCE(
-                                 [[#if _FORTIFY_SOURCE >= 2
-                                    error fail
-                                   #endif
-                                 ]])],
-                              [gl_cv_func_printf_directive_n="guessing yes"],
-                              [gl_cv_func_printf_directive_n="guessing no"])
-                            ;;
-                            # Guess no on Android.
-           linux*-android*) gl_cv_func_printf_directive_n="guessing no";;
-                            # Guess no on native Windows.
-           mingw*)          gl_cv_func_printf_directive_n="guessing no";;
-           *)               gl_cv_func_printf_directive_n="guessing yes";;
+                              # Guess no on glibc when _FORTIFY_SOURCE >= 2.
+           *-gnu* | gnu*)     AC_COMPILE_IFELSE(
+                                [AC_LANG_SOURCE(
+                                   [[#if _FORTIFY_SOURCE >= 2
+                                      error fail
+                                     #endif
+                                   ]])],
+                                [gl_cv_func_printf_directive_n="guessing yes"],
+                                [gl_cv_func_printf_directive_n="guessing no"])
+                              ;;
+                              # Guess no on Android.
+           linux*-android*)   gl_cv_func_printf_directive_n="guessing no";;
+                              # Guess no on native Windows.
+           mingw* | windows*) gl_cv_func_printf_directive_n="guessing no";;
+           *)                 gl_cv_func_printf_directive_n="guessing yes";;
          esac
         ])
     ])
@@ -1007,18 +1017,18 @@ int main ()
         [
 changequote(,)dnl
          case "$host_os" in
-                            # Guess yes on OpenBSD >= 6.0.
-           openbsd[1-5].*)  gl_cv_func_printf_directive_ls="guessing no";;
-           openbsd*)        gl_cv_func_printf_directive_ls="guessing yes";;
-           irix*)           gl_cv_func_printf_directive_ls="guessing no";;
-           solaris*)        gl_cv_func_printf_directive_ls="guessing no";;
-           cygwin*)         gl_cv_func_printf_directive_ls="guessing no";;
-           beos* | haiku*)  gl_cv_func_printf_directive_ls="guessing no";;
-                            # Guess no on Android.
-           linux*-android*) gl_cv_func_printf_directive_ls="guessing no";;
-                            # Guess yes on native Windows.
-           mingw*)          gl_cv_func_printf_directive_ls="guessing yes";;
-           *)               gl_cv_func_printf_directive_ls="guessing yes";;
+                              # Guess yes on OpenBSD >= 6.0.
+           openbsd[1-5].*)    gl_cv_func_printf_directive_ls="guessing no";;
+           openbsd*)          gl_cv_func_printf_directive_ls="guessing yes";;
+           irix*)             gl_cv_func_printf_directive_ls="guessing no";;
+           solaris*)          gl_cv_func_printf_directive_ls="guessing no";;
+           cygwin*)           gl_cv_func_printf_directive_ls="guessing no";;
+           beos* | haiku*)    gl_cv_func_printf_directive_ls="guessing no";;
+                              # Guess no on Android.
+           linux*-android*)   gl_cv_func_printf_directive_ls="guessing no";;
+                              # Guess yes on native Windows.
+           mingw* | windows*) gl_cv_func_printf_directive_ls="guessing yes";;
+           *)                 gl_cv_func_printf_directive_ls="guessing yes";;
          esac
 changequote([,])dnl
         ])
@@ -1102,13 +1112,17 @@ int main ()
 changequote(,)dnl
          case "$host_os" in
            netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | 
netbsdcoff[1-3]*)
-                            gl_cv_func_printf_positions="guessing no";;
-           beos*)           gl_cv_func_printf_positions="guessing no";;
-                            # Guess yes on Android.
-           linux*-android*) gl_cv_func_printf_positions="guessing yes";;
-                            # Guess no on native Windows.
-           mingw* | pw*)    gl_cv_func_printf_positions="guessing no";;
-           *)               gl_cv_func_printf_positions="guessing yes";;
+             gl_cv_func_printf_positions="guessing no";;
+           beos*)
+             gl_cv_func_printf_positions="guessing no";;
+             # Guess yes on Android.
+           linux*-android*)
+             gl_cv_func_printf_positions="guessing yes";;
+             # Guess no on native Windows.
+           mingw* | windows* | pw*)
+             gl_cv_func_printf_positions="guessing no";;
+           *)
+             gl_cv_func_printf_positions="guessing yes";;
          esac
 changequote([,])dnl
         ])
@@ -1143,13 +1157,13 @@ int main ()
         [
 changequote(,)dnl
          case "$host_os" in
-           cygwin*)         gl_cv_func_printf_flag_grouping="guessing no";;
-           netbsd*)         gl_cv_func_printf_flag_grouping="guessing no";;
-                            # Guess no on Android.
-           linux*-android*) gl_cv_func_printf_flag_grouping="guessing no";;
-                            # Guess no on native Windows.
-           mingw* | pw*)    gl_cv_func_printf_flag_grouping="guessing no";;
-           *)               gl_cv_func_printf_flag_grouping="guessing yes";;
+           cygwin*)                 gl_cv_func_printf_flag_grouping="guessing 
no";;
+           netbsd*)                 gl_cv_func_printf_flag_grouping="guessing 
no";;
+                                    # Guess no on Android.
+           linux*-android*)         gl_cv_func_printf_flag_grouping="guessing 
no";;
+                                    # Guess no on native Windows.
+           mingw* | windows* | pw*) gl_cv_func_printf_flag_grouping="guessing 
no";;
+           *)                       gl_cv_func_printf_flag_grouping="guessing 
yes";;
          esac
 changequote([,])dnl
         ])
@@ -1186,16 +1200,16 @@ int main ()
         [
 changequote(,)dnl
          case "$host_os" in
-                            # Guess yes on HP-UX 11.
-           hpux11*)         gl_cv_func_printf_flag_leftadjust="guessing yes";;
-                            # Guess no on HP-UX 10 and older.
-           hpux*)           gl_cv_func_printf_flag_leftadjust="guessing no";;
-                            # Guess yes on Android.
-           linux*-android*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
-                            # Guess yes on native Windows.
-           mingw*)          gl_cv_func_printf_flag_leftadjust="guessing yes";;
-                            # Guess yes otherwise.
-           *)               gl_cv_func_printf_flag_leftadjust="guessing yes";;
+                              # Guess yes on HP-UX 11.
+           hpux11*)           gl_cv_func_printf_flag_leftadjust="guessing 
yes";;
+                              # Guess no on HP-UX 10 and older.
+           hpux*)             gl_cv_func_printf_flag_leftadjust="guessing no";;
+                              # Guess yes on Android.
+           linux*-android*)   gl_cv_func_printf_flag_leftadjust="guessing 
yes";;
+                              # Guess yes on native Windows.
+           mingw* | windows*) gl_cv_func_printf_flag_leftadjust="guessing 
yes";;
+                              # Guess yes otherwise.
+           *)                 gl_cv_func_printf_flag_leftadjust="guessing 
yes";;
          esac
 changequote([,])dnl
         ])
@@ -1242,7 +1256,7 @@ changequote(,)dnl
                                # Guess no on Android.
            linux*-android*)    gl_cv_func_printf_flag_zero="guessing no";;
                                # Guess no on native Windows.
-           mingw*)             gl_cv_func_printf_flag_zero="guessing no";;
+           mingw* | windows*)  gl_cv_func_printf_flag_zero="guessing no";;
                                # If we don't know, obey --enable-cross-guesses.
            *)                  
gl_cv_func_printf_flag_zero="$gl_cross_guess_normal";;
          esac
@@ -1297,12 +1311,12 @@ int main ()
 changequote(,)dnl
          case "$host_os" in
            # Guess no only on Solaris, native Windows, and BeOS systems.
-           solaris*)        gl_cv_func_printf_precision="guessing no" ;;
-           mingw* | pw*)    gl_cv_func_printf_precision="guessing no" ;;
-           beos*)           gl_cv_func_printf_precision="guessing no" ;;
-                            # Guess yes on Android.
-           linux*-android*) gl_cv_func_printf_precision="guessing yes" ;;
-           *)               gl_cv_func_printf_precision="guessing yes" ;;
+           solaris*)                gl_cv_func_printf_precision="guessing no" 
;;
+           mingw* | windows* | pw*) gl_cv_func_printf_precision="guessing no" 
;;
+           beos*)                   gl_cv_func_printf_precision="guessing no" 
;;
+                                    # Guess yes on Android.
+           linux*-android*)         gl_cv_func_printf_precision="guessing yes" 
;;
+           *)                       gl_cv_func_printf_precision="guessing yes" 
;;
          esac
 changequote([,])dnl
         ])
@@ -1518,7 +1532,7 @@ changequote(,)dnl
                                  # Guess yes on Android.
            linux*-android*)      gl_cv_func_snprintf_truncation_c99="guessing 
yes";;
                                  # Guess no on native Windows.
-           mingw*)               gl_cv_func_snprintf_truncation_c99="guessing 
no";;
+           mingw* | windows*)    gl_cv_func_snprintf_truncation_c99="guessing 
no";;
                                  # If we don't know, obey 
--enable-cross-guesses.
            *)                    
gl_cv_func_snprintf_truncation_c99="$gl_cross_guess_normal";;
          esac
@@ -1615,7 +1629,9 @@ changequote(,)dnl
            linux*-android*)      gl_cv_func_snprintf_retval_c99="guessing 
yes";;
 changequote([,])dnl
                                  # Guess yes on MSVC, no on mingw.
-           mingw*)               AC_EGREP_CPP([Known], [
+           windows*-gnu*)        gl_cv_func_snprintf_retval_c99="guessing no" 
;;
+           windows*-msvc*)       gl_cv_func_snprintf_retval_c99="guessing yes" 
;;
+           mingw* | windows*)    AC_EGREP_CPP([Known], [
 #ifdef _MSC_VER
  Known
 #endif
@@ -1719,7 +1735,7 @@ changequote(,)dnl
                                  # Guess no on Android.
            linux*-android*)      gl_cv_func_snprintf_directive_n="guessing 
no";;
                                  # Guess no on native Windows.
-           mingw*)               gl_cv_func_snprintf_directive_n="guessing 
no";;
+           mingw* | windows*)    gl_cv_func_snprintf_directive_n="guessing 
no";;
                                  # If we don't know, obey 
--enable-cross-guesses.
            *)                    
gl_cv_func_snprintf_directive_n="$gl_cross_guess_normal";;
 changequote([,])dnl
@@ -1767,11 +1783,11 @@ int main()
         [gl_cv_func_snprintf_size1=yes],
         [gl_cv_func_snprintf_size1=no],
         [case "$host_os" in
-                            # Guess yes on Android.
-           linux*-android*) gl_cv_func_snprintf_size1="guessing yes" ;;
-                            # Guess yes on native Windows.
-           mingw*)          gl_cv_func_snprintf_size1="guessing yes" ;;
-           *)               gl_cv_func_snprintf_size1="guessing yes" ;;
+                              # Guess yes on Android.
+           linux*-android*)   gl_cv_func_snprintf_size1="guessing yes" ;;
+                              # Guess yes on native Windows.
+           mingw* | windows*) gl_cv_func_snprintf_size1="guessing yes" ;;
+           *)                 gl_cv_func_snprintf_size1="guessing yes" ;;
          esac
         ])
     ])
@@ -1844,40 +1860,40 @@ int main()
         [
 changequote(,)dnl
          case "$host_os" in
-                                 # Guess yes on glibc systems.
-           *-gnu* | gnu*)        gl_cv_func_vsnprintf_zerosize_c99="guessing 
yes";;
-                                 # Guess yes on musl systems.
-           *-musl* | midipix*)   gl_cv_func_vsnprintf_zerosize_c99="guessing 
yes";;
-                                 # Guess yes on FreeBSD >= 5.
-           freebsd[1-4].*)       gl_cv_func_vsnprintf_zerosize_c99="guessing 
no";;
-           freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing 
yes";;
-           midnightbsd*)         gl_cv_func_vsnprintf_zerosize_c99="guessing 
yes";;
-                                 # Guess yes on Mac OS X >= 10.3.
-           darwin[1-6].*)        gl_cv_func_vsnprintf_zerosize_c99="guessing 
no";;
-           darwin*)              gl_cv_func_vsnprintf_zerosize_c99="guessing 
yes";;
-                                 # Guess yes on Cygwin.
-           cygwin*)              gl_cv_func_vsnprintf_zerosize_c99="guessing 
yes";;
-                                 # Guess yes on Solaris >= 2.6.
+                                    # Guess yes on glibc systems.
+           *-gnu* | gnu*)           
gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                    # Guess yes on musl systems.
+           *-musl* | midipix*)      
gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                    # Guess yes on FreeBSD >= 5.
+           freebsd[1-4].*)          
gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           freebsd* | kfreebsd*)    
gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+           midnightbsd*)            
gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                    # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)           
gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           darwin*)                 
gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                    # Guess yes on Cygwin.
+           cygwin*)                 
gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                    # Guess yes on Solaris >= 2.6.
            solaris2.[0-5] | solaris2.[0-5].*)
-                                 gl_cv_func_vsnprintf_zerosize_c99="guessing 
no";;
-           solaris*)             gl_cv_func_vsnprintf_zerosize_c99="guessing 
yes";;
-                                 # Guess yes on AIX >= 4.
-           aix[1-3]*)            gl_cv_func_vsnprintf_zerosize_c99="guessing 
no";;
-           aix*)                 gl_cv_func_vsnprintf_zerosize_c99="guessing 
yes";;
-                                 # Guess yes on IRIX >= 6.5.
-           irix6.5)              gl_cv_func_vsnprintf_zerosize_c99="guessing 
yes";;
-                                 # Guess yes on NetBSD >= 3.
+                                    
gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           solaris*)                
gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                    # Guess yes on AIX >= 4.
+           aix[1-3]*)               
gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           aix*)                    
gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                    # Guess yes on IRIX >= 6.5.
+           irix6.5)                 
gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                    # Guess yes on NetBSD >= 3.
            netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | 
netbsdcoff[1-2]*)
-                                 gl_cv_func_vsnprintf_zerosize_c99="guessing 
no";;
-           netbsd*)              gl_cv_func_vsnprintf_zerosize_c99="guessing 
yes";;
-                                 # Guess yes on BeOS.
-           beos*)                gl_cv_func_vsnprintf_zerosize_c99="guessing 
yes";;
-                                 # Guess yes on Android.
-           linux*-android*)      gl_cv_func_vsnprintf_zerosize_c99="guessing 
yes";;
-                                 # Guess yes on native Windows.
-           mingw* | pw*)         gl_cv_func_vsnprintf_zerosize_c99="guessing 
yes";;
-                                 # If we don't know, obey 
--enable-cross-guesses.
-           *)                    
gl_cv_func_vsnprintf_zerosize_c99="$gl_cross_guess_normal";;
+                                    
gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           netbsd*)                 
gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                    # Guess yes on BeOS.
+           beos*)                   
gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                    # Guess yes on Android.
+           linux*-android*)         
gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                    # Guess yes on native Windows.
+           mingw* | windows* | pw*) 
gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                    # If we don't know, obey 
--enable-cross-guesses.
+           *)                       
gl_cv_func_vsnprintf_zerosize_c99="$gl_cross_guess_normal";;
          esac
 changequote([,])dnl
         ])
@@ -1934,17 +1950,17 @@ int main()
         [gl_cv_func_swprintf_works=yes],
         [gl_cv_func_swprintf_works=no],
         [case "$host_os" in
-                               # Guess yes on glibc systems.
-           *-gnu* | gnu*)      gl_cv_func_swprintf_works="guessing yes";;
-                               # Guess no on musl systems.
-           *-musl* | midipix*) gl_cv_func_swprintf_works="guessing no";;
-                               # Guess no on FreeBSD, NetBSD, OpenBSD, macOS, 
AIX.
+                                    # Guess yes on glibc systems.
+           *-gnu* | gnu*)           gl_cv_func_swprintf_works="guessing yes";;
+                                    # Guess no on musl systems.
+           *-musl* | midipix*)      gl_cv_func_swprintf_works="guessing no";;
+                                    # Guess no on FreeBSD, NetBSD, OpenBSD, 
macOS, AIX.
            freebsd* | midnightbsd* | netbsd* | openbsd* | darwin* | aix*)
-                               gl_cv_func_swprintf_works="guessing no";;
-                               # Guess no on native Windows.
-           mingw* | pw*)       gl_cv_func_swprintf_works="guessing no";;
-                               # If we don't know, obey --enable-cross-guesses.
-           *)                  
gl_cv_func_swprintf_works="$gl_cross_guess_normal";;
+                                    gl_cv_func_swprintf_works="guessing no";;
+                                    # Guess no on native Windows.
+           mingw* | windows* | pw*) gl_cv_func_swprintf_works="guessing no";;
+                                    # If we don't know, obey 
--enable-cross-guesses.
+           *)                       
gl_cv_func_swprintf_works="$gl_cross_guess_normal";;
          esac
         ])
     ])
@@ -1983,7 +1999,7 @@ int main ()
         [gl_cv_func_swprintf_directive_la=yes],
         [gl_cv_func_swprintf_directive_la=no],
         [case "$host_os" in
-                                 # Guess yes on glibc >= 2.17 systems.
+                               # Guess yes on glibc >= 2.17 systems.
            *-gnu* | gnu*)
              AC_EGREP_CPP([Unlucky], [
                #include <features.h>
@@ -1996,14 +2012,14 @@ int main ()
                [gl_cv_func_swprintf_directive_la="guessing yes"],
                [gl_cv_func_swprintf_directive_la="guessing no"])
              ;;
-                                 # Guess yes on musl systems.
-           *-musl* | midipix*)   gl_cv_func_swprintf_directive_la="guessing 
yes";;
-                                 # Guess yes on Android.
-           linux*-android*)      gl_cv_func_swprintf_directive_la="guessing 
yes";;
-                                 # Guess no on native Windows.
-           mingw*)               gl_cv_func_swprintf_directive_la="guessing 
no";;
-                                 # If we don't know, obey 
--enable-cross-guesses.
-           *)                    
gl_cv_func_swprintf_directive_la="$gl_cross_guess_normal";;
+                               # Guess yes on musl systems.
+           *-musl* | midipix*) gl_cv_func_swprintf_directive_la="guessing 
yes";;
+                               # Guess yes on Android.
+           linux*-android*)    gl_cv_func_swprintf_directive_la="guessing 
yes";;
+                               # Guess no on native Windows.
+           mingw* | windows*)  gl_cv_func_swprintf_directive_la="guessing no";;
+                               # If we don't know, obey --enable-cross-guesses.
+           *)                  
gl_cv_func_swprintf_directive_la="$gl_cross_guess_normal";;
          esac
         ])
     ])
@@ -2040,16 +2056,16 @@ int main ()
         [gl_cv_func_swprintf_directive_lc=yes],
         [gl_cv_func_swprintf_directive_lc=no],
         [case "$host_os" in
-                                 # Guess yes on glibc systems.
-           *-gnu* | gnu*)        gl_cv_func_swprintf_directive_lc="guessing 
yes";;
-                                 # Guess no on musl systems.
-           *-musl* | midipix*)   gl_cv_func_swprintf_directive_lc="guessing 
no";;
-                                 # Guess no on Android.
-           linux*-android*)      gl_cv_func_swprintf_directive_lc="guessing 
no";;
-                                 # Guess yes on native Windows.
-           mingw*)               gl_cv_func_swprintf_directive_lc="guessing 
yes";;
-                                 # If we don't know, obey 
--enable-cross-guesses.
-           *)                    
gl_cv_func_swprintf_directive_lc="$gl_cross_guess_normal";;
+                               # Guess yes on glibc systems.
+           *-gnu* | gnu*)      gl_cv_func_swprintf_directive_lc="guessing 
yes";;
+                               # Guess no on musl systems.
+           *-musl* | midipix*) gl_cv_func_swprintf_directive_lc="guessing no";;
+                               # Guess no on Android.
+           linux*-android*)    gl_cv_func_swprintf_directive_lc="guessing no";;
+                               # Guess yes on native Windows.
+           mingw* | windows*)  gl_cv_func_swprintf_directive_lc="guessing 
yes";;
+                               # If we don't know, obey --enable-cross-guesses.
+           *)                  
gl_cv_func_swprintf_directive_lc="$gl_cross_guess_normal";;
          esac
         ])
     ])
diff --git a/gnulib/m4/pthread_rwlock_rdlock.m4 
b/gnulib/m4/pthread_rwlock_rdlock.m4
index 66b29f8963..7cc650c49d 100644
--- a/gnulib/m4/pthread_rwlock_rdlock.m4
+++ b/gnulib/m4/pthread_rwlock_rdlock.m4
@@ -1,4 +1,4 @@
-# pthread_rwlock_rdlock.m4 serial 5
+# pthread_rwlock_rdlock.m4 serial 6
 dnl Copyright (C) 2017-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -164,7 +164,7 @@ main ()
           *-android*)         
gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;;
                               # Guess yes on native Windows with the mingw-w64 
winpthreads library.
                               # Guess no on native Windows with the gnulib 
windows-rwlock module.
-          mingw*)             if test "$gl_use_threads" = yes || test 
"$gl_use_threads" = posix; then
+          mingw* | windows*)  if test "$gl_use_threads" = yes || test 
"$gl_use_threads" = posix; then
                                 
gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes"
                               else
                                 
gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no"
diff --git a/gnulib/m4/realloc.m4 b/gnulib/m4/realloc.m4
index 26053914cb..fcd6253557 100644
--- a/gnulib/m4/realloc.m4
+++ b/gnulib/m4/realloc.m4
@@ -1,4 +1,4 @@
-# realloc.m4 serial 27
+# realloc.m4 serial 28
 dnl Copyright (C) 2007, 2009-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -26,7 +26,7 @@ AC_DEFUN([_AC_FUNC_REALLOC_IF],
           # Guess yes on platforms where we know the result.
           *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \
           | gnu* | *-musl* | midipix* | midnightbsd* \
-          | hpux* | solaris* | cygwin* | mingw* | msys* )
+          | hpux* | solaris* | cygwin* | mingw* | windows* | msys* )
             ac_cv_func_realloc_0_nonnull="guessing yes" ;;
           # If we don't know, obey --enable-cross-guesses.
           *) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;;
diff --git a/gnulib/m4/regex.m4 b/gnulib/m4/regex.m4
index 7acadc4834..20082b89a8 100644
--- a/gnulib/m4/regex.m4
+++ b/gnulib/m4/regex.m4
@@ -1,4 +1,4 @@
-# serial 74
+# serial 75
 
 # Copyright (C) 1996-2001, 2003-2023 Free Software Foundation, Inc.
 #
@@ -327,10 +327,10 @@ AC_DEFUN([gl_REGEX],
         [gl_cv_func_re_compile_pattern_working=yes],
         [gl_cv_func_re_compile_pattern_working=no],
         [case "$host_os" in
-                   # Guess no on native Windows.
-           mingw*) gl_cv_func_re_compile_pattern_working="guessing no" ;;
-                   # Otherwise obey --enable-cross-guesses.
-           *)      
gl_cv_func_re_compile_pattern_working="$gl_cross_guess_normal" ;;
+                              # Guess no on native Windows.
+           mingw* | windows*) gl_cv_func_re_compile_pattern_working="guessing 
no" ;;
+                              # Otherwise obey --enable-cross-guesses.
+           *)                 
gl_cv_func_re_compile_pattern_working="$gl_cross_guess_normal" ;;
          esac
         ])
       ])
diff --git a/gnulib/m4/setlocale_null.m4 b/gnulib/m4/setlocale_null.m4
index 1105d693fe..bafc5be8ec 100644
--- a/gnulib/m4/setlocale_null.m4
+++ b/gnulib/m4/setlocale_null.m4
@@ -1,4 +1,4 @@
-# setlocale_null.m4 serial 8
+# setlocale_null.m4 serial 9
 dnl Copyright (C) 2019-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -31,7 +31,7 @@ AC_DEFUN([gl_FUNC_SETLOCALE_NULL],
           [gl_cv_func_setlocale_null_all_mtsafe=no])
         ;;
        # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows.
-       *-gnu* | gnu* | hpux* | irix* | solaris* | mingw*)
+       *-gnu* | gnu* | hpux* | irix* | solaris* | mingw* | windows*)
          gl_cv_func_setlocale_null_all_mtsafe=yes ;;
        # If we don't know, obey --enable-cross-guesses.
        *)
@@ -40,7 +40,7 @@ AC_DEFUN([gl_FUNC_SETLOCALE_NULL],
     ])
   dnl On platforms without multithreading, there is no issue.
   case "$host_os" in
-    mingw*) ;;
+    mingw* | windows*) ;;
     *)
       if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then
         gl_cv_func_setlocale_null_all_mtsafe="trivially yes"
@@ -62,7 +62,7 @@ AC_DEFUN([gl_FUNC_SETLOCALE_NULL],
        openbsd* | aix*)
          gl_cv_func_setlocale_null_one_mtsafe=no ;;
        # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, 
Solaris, Haiku, Cygwin, native Windows.
-       *-gnu* | gnu* | *-musl* | midipix* | darwin* | freebsd* | midnightbsd* 
| netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*)
+       *-gnu* | gnu* | *-musl* | midipix* | darwin* | freebsd* | midnightbsd* 
| netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw* | windows*)
          gl_cv_func_setlocale_null_one_mtsafe=yes ;;
        # If we don't know, obey --enable-cross-guesses.
        *)
@@ -71,7 +71,7 @@ AC_DEFUN([gl_FUNC_SETLOCALE_NULL],
     ])
   dnl On platforms without multithreading, there is no issue.
   case "$host_os" in
-    mingw*) ;;
+    mingw* | windows*) ;;
     *)
       if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then
         gl_cv_func_setlocale_null_one_mtsafe="trivially yes"
@@ -88,7 +88,9 @@ AC_DEFUN([gl_FUNC_SETLOCALE_NULL],
   dnl Determine link dependencies of lib/setlocale_null.c and 
lib/setlocale-lock.c.
   if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 
0; then
     case "$host_os" in
-      mingw*) SETLOCALE_NULL_LIB= ;;
+      mingw* | windows*)
+        SETLOCALE_NULL_LIB=
+        ;;
       *)
         gl_WEAK_SYMBOLS
         case "$gl_cv_have_weak" in
diff --git a/gnulib/m4/stat.m4 b/gnulib/m4/stat.m4
index 6d1628c217..81bd16a8f4 100644
--- a/gnulib/m4/stat.m4
+++ b/gnulib/m4/stat.m4
@@ -1,4 +1,4 @@
-# serial 19
+# serial 20
 
 # Copyright (C) 2009-2023 Free Software Foundation, Inc.
 #
@@ -12,7 +12,7 @@ AC_DEFUN([gl_FUNC_STAT],
   AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
   AC_CHECK_FUNCS_ONCE([lstat])
   case "$host_os" in
-    mingw*)
+    mingw* | windows*)
       dnl On this platform, the original stat() returns st_atime, st_mtime,
       dnl st_ctime values that are affected by the time zone.
       REPLACE_STAT=1
@@ -80,7 +80,7 @@ AC_DEFUN([gl_PREREQ_STAT], [
 AC_DEFUN([gl_PREREQ_STAT_W32], [
   AC_REQUIRE([AC_CANONICAL_HOST])
   case "$host_os" in
-    mingw*)
+    mingw* | windows*)
       AC_CHECK_HEADERS([sdkddkver.h])
       ;;
   esac
diff --git a/gnulib/m4/stdalign.m4 b/gnulib/m4/stdalign.m4
new file mode 100644
index 0000000000..5880efb2eb
--- /dev/null
+++ b/gnulib/m4/stdalign.m4
@@ -0,0 +1,206 @@
+# Check for alignas and alignof that conform to C23.
+
+dnl Copyright 2011-2023 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert and Bruno Haible.
+
+# Prepare for substituting <stdalign.h> if it is not supported.
+
+AC_DEFUN([gl_ALIGNASOF],
+[
+  AC_CACHE_CHECK([for alignas and alignof],
+    [gl_cv_header_working_stdalign_h],
+    [gl_save_CFLAGS=$CFLAGS
+     for gl_working in "yes, keywords" "yes, <stdalign.h> macros"; do
+      AS_CASE([$gl_working],
+        [*stdalign.h*], [CFLAGS="$gl_save_CFLAGS -DINCLUDE_STDALIGN_H"])
+      AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <stdint.h>
+            #ifdef INCLUDE_STDALIGN_H
+             #include <stdalign.h>
+            #endif
+            #include <stddef.h>
+
+            /* Test that alignof yields a result consistent with offsetof.
+               This catches GCC bug 52023
+               <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>.  */
+            #ifdef __cplusplus
+               template <class t> struct alignof_helper { char a; t b; };
+            # define ao(type) offsetof (alignof_helper<type>, b)
+            #else
+            # define ao(type) offsetof (struct { char a; type b; }, b)
+            #endif
+            char test_double[ao (double) % _Alignof (double) == 0 ? 1 : -1];
+            char test_long[ao (long int) % _Alignof (long int) == 0 ? 1 : -1];
+            char test_alignof[alignof (double) == _Alignof (double) ? 1 : -1];
+
+            /* Test alignas only on platforms where gnulib can help.  */
+            #if \
+                ((defined __cplusplus && 201103 <= __cplusplus) \
+                 || (__TINYC__ && defined __attribute__) \
+                 || (defined __APPLE__ && defined __MACH__ \
+                     ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
+                     : __GNUC__) \
+                 || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \
+                 || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__ \
+                 || 1300 <= _MSC_VER)
+              struct alignas_test { char c; char alignas (8) alignas_8; };
+              char test_alignas[offsetof (struct alignas_test, alignas_8) == 8
+                                ? 1 : -1];
+            #endif
+          ]])],
+       [gl_cv_header_working_stdalign_h=$gl_working],
+       [gl_cv_header_working_stdalign_h=no])
+
+      CFLAGS=$gl_save_CFLAGS
+      test "$gl_cv_header_working_stdalign_h" != no && break
+     done])
+
+  AS_CASE([$gl_cv_header_working_stdalign_h],
+    [yes*keyword*],
+      [AC_DEFINE([HAVE_C_ALIGNASOF], [1],
+         [Define to 1 if the alignas and alignof keywords work.])])
+
+  dnl The "zz" puts this toward config.h's end, to avoid potential
+  dnl collisions with other definitions.
+  AH_VERBATIM([zzalignas],
+[#if !defined HAVE_C_ALIGNASOF \
+    && !(defined __cplusplus && 201103 <= __cplusplus) \
+    && !defined alignof
+# if defined HAVE_STDALIGN_H
+#  include <stdalign.h>
+# endif
+
+/* ISO C23 alignas and alignof for platforms that lack it.
+
+   References:
+   ISO C23 (latest free draft
+   <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf>)
+   sections 6.5.3.4, 6.7.5, 7.15.
+   C++11 (latest free draft
+   <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf>)
+   section 18.10. */
+
+/* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment
+   requirement of a structure member (i.e., slot or field) that is of
+   type TYPE, as an integer constant expression.
+
+   This differs from GCC's and clang's __alignof__ operator, which can
+   yield a better-performing alignment for an object of that type.  For
+   example, on x86 with GCC and on Linux/x86 with clang,
+   __alignof__ (double) and __alignof__ (long long) are 8, whereas
+   alignof (double) and alignof (long long) are 4 unless the option
+   '-malign-double' is used.
+
+   The result cannot be used as a value for an 'enum' constant, if you
+   want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc.  */
+
+/* GCC releases before GCC 4.9 had a bug in _Alignof.  See GCC bug 52023
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>.
+   clang versions < 8.0.0 have the same bug.  */
+#  if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \
+       || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9) \
+           && !defined __clang__) \
+       || (defined __clang__ && __clang_major__ < 8))
+#   undef/**/_Alignof
+#   ifdef __cplusplus
+#    if (201103 <= __cplusplus || defined _MSC_VER)
+#     define _Alignof(type) alignof (type)
+#    else
+      template <class __t> struct __alignof_helper { char __a; __t __b; };
+#     if (defined __GNUC__ && 4 <= __GNUC__) || defined __clang__
+#      define _Alignof(type) __builtin_offsetof (__alignof_helper<type>, __b)
+#     else
+#      define _Alignof(type) offsetof (__alignof_helper<type>, __b)
+#     endif
+#     define _GL_STDALIGN_NEEDS_STDDEF 1
+#    endif
+#   else
+#    if (defined __GNUC__ && 4 <= __GNUC__) || defined __clang__
+#     define _Alignof(type) __builtin_offsetof (struct { char __a; type __b; 
}, __b)
+#    else
+#     define _Alignof(type) offsetof (struct { char __a; type __b; }, __b)
+#     define _GL_STDALIGN_NEEDS_STDDEF 1
+#    endif
+#   endif
+#  endif
+#  if ! (defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER))
+#   undef/**/alignof
+#   define alignof _Alignof
+#  endif
+
+/* alignas (A), also known as _Alignas (A), aligns a variable or type
+   to the alignment A, where A is an integer constant expression.  For
+   example:
+
+      int alignas (8) foo;
+      struct s { int a; int alignas (8) bar; };
+
+   aligns the address of FOO and the offset of BAR to be multiples of 8.
+
+   A should be a power of two that is at least the type's alignment
+   and at most the implementation's alignment limit.  This limit is
+   2**28 on typical GNUish hosts, and 2**13 on MSVC.  To be portable
+   to MSVC through at least version 10.0, A should be an integer
+   constant, as MSVC does not support expressions such as 1 << 3.
+   To be portable to Sun C 5.11, do not align auto variables to
+   anything stricter than their default alignment.
+
+   The following C23 requirements are not supported here:
+
+     - If A is zero, alignas has no effect.
+     - alignas can be used multiple times; the strictest one wins.
+     - alignas (TYPE) is equivalent to alignas (alignof (TYPE)).
+
+   */
+# if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112
+#  if defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER)
+#   define _Alignas(a) alignas (a)
+#  elif (!defined __attribute__ \
+         && ((defined __APPLE__ && defined __MACH__ \
+              ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \
+              : __GNUC__ && !defined __ibmxl__) \
+             || (4 <= __clang_major__) \
+             || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \
+             || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__))
+#   define _Alignas(a) __attribute__ ((__aligned__ (a)))
+#  elif 1300 <= _MSC_VER
+#   define _Alignas(a) __declspec (align (a))
+#  endif
+# endif
+# if !defined HAVE_STDALIGN_H
+#  if ((defined _Alignas \
+        && !(defined __cplusplus \
+             && (201103 <= __cplusplus || defined _MSC_VER))) \
+       || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
+#   define alignas _Alignas
+#  endif
+# endif
+
+# if defined _GL_STDALIGN_NEEDS_STDDEF
+#  include <stddef.h>
+# endif
+#endif])
+])
+
+AC_DEFUN([gl_STDALIGN_H],
+[
+  AC_REQUIRE([gl_ALIGNASOF])
+  if test "$gl_cv_header_working_stdalign_h" = no; then
+    GL_GENERATE_STDALIGN_H=true
+  else
+    GL_GENERATE_STDALIGN_H=false
+  fi
+
+  gl_CHECK_NEXT_HEADERS([stdalign.h])
+  if test $ac_cv_header_stdalign_h = yes; then
+    HAVE_STDALIGN_H=1
+  else
+    HAVE_STDALIGN_H=0
+  fi
+  AC_SUBST([HAVE_STDALIGN_H])
+])
diff --git a/gnulib/m4/stdint.m4 b/gnulib/m4/stdint.m4
index d6961b0993..d5ff08b1b8 100644
--- a/gnulib/m4/stdint.m4
+++ b/gnulib/m4/stdint.m4
@@ -1,4 +1,4 @@
-# stdint.m4 serial 61
+# stdint.m4 serial 63
 dnl Copyright (C) 2001-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -150,7 +150,10 @@ intmax_t i = INTMAX_MAX;
 uintmax_t j = UINTMAX_MAX;
 
 /* Check that SIZE_MAX has the correct type, if possible.  */
-#if 201112 <= __STDC_VERSION__
+/* ISO C 11 mandates _Generic, but GCC versions < 4.9 lack it.  */
+#if 201112 <= __STDC_VERSION__ \
+    && (!defined __GNUC__ || 4 < __GNUC__ + (9 <= __GNUC_MINOR__) \
+        || defined __clang__)
 int k = _Generic (SIZE_MAX, size_t: 0);
 #elif (2 <= __GNUC__ || 4 <= __clang_major__ || defined __IBM__TYPEOF__ \
        || (0x5110 <= __SUNPRO_C && !__STDC__))
@@ -283,10 +286,10 @@ static const char *macro_values[] =
               [gl_cv_header_working_stdint_h=yes],
               [],
               [case "$host_os" in
-                         # Guess yes on native Windows.
-                 mingw*) gl_cv_header_working_stdint_h="guessing yes" ;;
-                         # In general, assume it works.
-                 *)      gl_cv_header_working_stdint_h="guessing yes" ;;
+                                    # Guess yes on native Windows.
+                 mingw* | windows*) gl_cv_header_working_stdint_h="guessing 
yes" ;;
+                                    # In general, assume it works.
+                 *)                 gl_cv_header_working_stdint_h="guessing 
yes" ;;
                esac
               ])
          ])
diff --git a/gnulib/m4/strerror.m4 b/gnulib/m4/strerror.m4
index 9f1dddd599..0e1f7d73aa 100644
--- a/gnulib/m4/strerror.m4
+++ b/gnulib/m4/strerror.m4
@@ -1,4 +1,4 @@
-# strerror.m4 serial 24
+# strerror.m4 serial 25
 dnl Copyright (C) 2002, 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -85,7 +85,7 @@ AC_DEFUN([gl_FUNC_STRERROR_0],
                              # Guess yes on musl systems.
          *-musl* | midipix*) gl_cv_func_strerror_0_works="guessing yes" ;;
                              # Guess yes on native Windows.
-         mingw*)             gl_cv_func_strerror_0_works="guessing yes" ;;
+         mingw* | windows*)  gl_cv_func_strerror_0_works="guessing yes" ;;
                              # If we don't know, obey --enable-cross-guesses.
          *)                  
gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;;
        esac
diff --git a/gnulib/m4/threadlib.m4 b/gnulib/m4/threadlib.m4
index 1fc5777e97..303382881a 100644
--- a/gnulib/m4/threadlib.m4
+++ b/gnulib/m4/threadlib.m4
@@ -1,4 +1,4 @@
-# threadlib.m4 serial 38
+# threadlib.m4 serial 39
 dnl Copyright (C) 2005-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -85,7 +85,7 @@ AC_DEFUN([gl_WEAK_SYMBOLS],
   AC_CACHE_CHECK([whether imported symbols can be declared weak],
     [gl_cv_have_weak],
     [case "$host_os" in
-       cygwin* | mingw*)
+       cygwin* | mingw* | windows*)
          dnl On Cygwin 3.2.0 with gcc 10.2, and likewise on mingw 10.0.0 with
          dnl gcc 11.3, the test below would succeed, but programs that use
          dnl pthread_in_use() with weak symbol references crash miserably at
@@ -344,7 +344,7 @@ AC_DEFUN([gl_STDTHREADLIB_BODY],
     AC_CHECK_HEADERS_ONCE([threads.h])
 
     case "$host_os" in
-      mingw*)
+      mingw* | windows*)
         LIBSTDTHREAD=
         ;;
       *)
@@ -465,7 +465,7 @@ changequote(,)dnl
                esac
                ;;
          dnl Obey gl_AVOID_WINPTHREAD on mingw.
-         mingw*)
+         mingw* | windows*)
                case "$gl_use_winpthreads_default" in
                  yes) gl_use_threads=posix ;;
                  no)  gl_use_threads=windows ;;
@@ -564,7 +564,7 @@ AC_DEFUN([gl_THREADLIB_BODY],
       case "$gl_use_threads" in
         yes | windows | win32) # The 'win32' is for backward compatibility.
           if { case "$host_os" in
-                 mingw*) true;;
+                 mingw* | windows*) true;;
                  *) false;;
                esac
              }; then
diff --git a/gnulib/m4/wcrtomb.m4 b/gnulib/m4/wcrtomb.m4
index fa503b5335..3152b37563 100644
--- a/gnulib/m4/wcrtomb.m4
+++ b/gnulib/m4/wcrtomb.m4
@@ -1,4 +1,4 @@
-# wcrtomb.m4 serial 18
+# wcrtomb.m4 serial 19
 dnl Copyright (C) 2008-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -82,9 +82,11 @@ int main ()
 changequote(,)dnl
           case "$host_os" in
             # Guess no on AIX 4, OSF/1, Solaris, native Windows.
-            aix4* | osf* | solaris* | mingw*) 
gl_cv_func_wcrtomb_retval="guessing no" ;;
+            aix4* | osf* | solaris* | mingw* | windows*)
+              gl_cv_func_wcrtomb_retval="guessing no" ;;
             # Guess yes otherwise.
-            *)                                
gl_cv_func_wcrtomb_retval="guessing yes" ;;
+            *)
+              gl_cv_func_wcrtomb_retval="guessing yes" ;;
           esac
 changequote([,])dnl
           if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test 
$LOCALE_JA != none || test $LOCALE_ZH_CN != none; then
diff --git a/gnulib/m4/wctype.m4 b/gnulib/m4/wctype.m4
index 321bd696fb..4f3a836dc5 100644
--- a/gnulib/m4/wctype.m4
+++ b/gnulib/m4/wctype.m4
@@ -1,4 +1,4 @@
-# wctype.m4 serial 4
+# wctype.m4 serial 6
 dnl Copyright (C) 2011-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -11,10 +11,11 @@ AC_DEFUN_ONCE([gl_FUNC_WCTYPE],
   AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
   HAVE_WCTYPE=$HAVE_WCTYPE_T
   if test $HAVE_WCTYPE = 1; then
-    AC_CACHE_CHECK([whether wctype supports the "blank" character class],
+    AC_CACHE_CHECK([whether wctype supports the "blank" and "punct" character 
classes],
       [gl_cv_func_wctype_works],
       [AC_RUN_IFELSE(
          [AC_LANG_SOURCE([[
+            #include <ctype.h>
             #include <wchar.h>
             #include <wctype.h>
             int main ()
@@ -25,15 +26,20 @@ AC_DEFUN_ONCE([gl_FUNC_WCTYPE],
               /* This test fails on MSVC 14.  */
               if ((! iswctype ('\t', wctype ("blank"))) != (! iswblank ('\t')))
                 return 2;
+              /* This test fails on Android 11.  */
+              if ((! iswctype ('\`', wctype ("punct"))) != (! ispunct ('\`')))
+                return 4;
               return 0;
             }
          ]])],
          [gl_cv_func_wctype_works=yes], [gl_cv_func_wctype_works=no],
          [case "$host_os" in
-                    # Guess no on native Windows.
-            mingw*) gl_cv_func_wctype_works="guessing no" ;;
-                    # Guess yes otherwise.
-            *)      gl_cv_func_wctype_works="guessing yes" ;;
+                               # Guess no on native Windows.
+            mingw* | windows*) gl_cv_func_wctype_works="guessing no" ;;
+                               # Guess no on Android.
+            android*)          gl_cv_func_wctype_works="guessing no" ;;
+                               # Guess yes otherwise.
+            *)                 gl_cv_func_wctype_works="guessing yes" ;;
           esac
          ])
       ])
diff --git a/gnulib/m4/wctype_h.m4 b/gnulib/m4/wctype_h.m4
index 43a2d9cf10..ac9c35b2da 100644
--- a/gnulib/m4/wctype_h.m4
+++ b/gnulib/m4/wctype_h.m4
@@ -1,4 +1,4 @@
-# wctype_h.m4 serial 32
+# wctype_h.m4 serial 33
 
 dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
 
@@ -178,6 +178,7 @@ AC_DEFUN([gl_WCTYPE_H_REQUIRE_DEFAULTS],
   m4_defun(GL_MODULE_INDICATOR_PREFIX[_WCTYPE_H_MODULE_INDICATOR_DEFAULTS], [
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWBLANK])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWDIGIT])
+    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWPUNCT])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWXDIGIT])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTYPE])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWCTYPE])
@@ -196,6 +197,7 @@ AC_DEFUN([gl_WCTYPE_H_DEFAULTS],
   HAVE_WCTRANS_T=1;     AC_SUBST([HAVE_WCTRANS_T])
   REPLACE_ISWBLANK=0;   AC_SUBST([REPLACE_ISWBLANK])
   REPLACE_ISWDIGIT=0;   AC_SUBST([REPLACE_ISWDIGIT])
+  REPLACE_ISWPUNCT=0;   AC_SUBST([REPLACE_ISWPUNCT])
   REPLACE_ISWXDIGIT=0;  AC_SUBST([REPLACE_ISWXDIGIT])
   REPLACE_WCTRANS=0;    AC_SUBST([REPLACE_WCTRANS])
   REPLACE_WCTYPE=0;     AC_SUBST([REPLACE_WCTYPE])
diff --git a/tp/Texinfo/XS/gnulib/lib/Makefile.am 
b/tp/Texinfo/XS/gnulib/lib/Makefile.am
index bddbe79c03..9436b44fb5 100644
--- a/tp/Texinfo/XS/gnulib/lib/Makefile.am
+++ b/tp/Texinfo/XS/gnulib/lib/Makefile.am
@@ -1718,6 +1718,7 @@ wctype.h: wctype.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e 
's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \
              -e 's/@''GNULIB_ISWBLANK''@/$(GL_GNULIB_ISWBLANK)/g' \
              -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \
+             -e 's/@''GNULIB_ISWPUNCT''@/$(GL_GNULIB_ISWPUNCT)/g' \
              -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \
              -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \
              -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \
@@ -1730,6 +1731,7 @@ wctype.h: wctype.in.h $(top_builddir)/config.status 
$(CXXDEFS_H) $(ARG_NONNULL_H
              -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
              -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
              -e 's/@''REPLACE_ISWDIGIT''@/$(REPLACE_ISWDIGIT)/g' \
+             -e 's/@''REPLACE_ISWPUNCT''@/$(REPLACE_ISWPUNCT)/g' \
              -e 's/@''REPLACE_ISWXDIGIT''@/$(REPLACE_ISWXDIGIT)/g' \
              -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
              -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
diff --git a/tp/Texinfo/XS/gnulib/lib/attribute.h 
b/tp/Texinfo/XS/gnulib/lib/attribute.h
index 9464fde0f3..e4e36092b0 100644
--- a/tp/Texinfo/XS/gnulib/lib/attribute.h
+++ b/tp/Texinfo/XS/gnulib/lib/attribute.h
@@ -182,6 +182,8 @@
 
 /* The function does not throw exceptions.  */
 /* Applies to: functions.  */
+/* After a function's parameter list, this attribute must come first, before
+   other attributes.  */
 #define ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_NOTHROW
 
 /* Do not inline the function.  */
diff --git a/tp/Texinfo/XS/gnulib/lib/intprops-internal.h 
b/tp/Texinfo/XS/gnulib/lib/intprops-internal.h
index 0467a9ca8f..41039a093b 100644
--- a/tp/Texinfo/XS/gnulib/lib/intprops-internal.h
+++ b/tp/Texinfo/XS/gnulib/lib/intprops-internal.h
@@ -20,6 +20,11 @@
 
 #include <limits.h>
 
+/* Pacify GCC 13.2 in some calls to _GL_EXPR_SIGNED.  */
+#if defined __GNUC__ && 4 < __GNUC__ + (3 <= __GNUC_MINOR__)
+# pragma GCC diagnostic ignored "-Wtype-limits"
+#endif
+
 /* Return a value with the common real type of E and V and the value of V.
    Do not evaluate E.  */
 #define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v))
diff --git a/tp/Texinfo/XS/gnulib/lib/stddef.in.h 
b/tp/Texinfo/XS/gnulib/lib/stddef.in.h
index bb18198c98..190fd575d8 100644
--- a/tp/Texinfo/XS/gnulib/lib/stddef.in.h
+++ b/tp/Texinfo/XS/gnulib/lib/stddef.in.h
@@ -101,11 +101,33 @@ typedef long max_align_t;
 #  ifndef _@GUARD_PREFIX@_STDDEF_H
 #   define _@GUARD_PREFIX@_STDDEF_H
 
-/* This file uses _Noreturn.  */
+/* This file uses _Noreturn, _GL_ATTRIBUTE_NOTHROW.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
 
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+#ifndef _GL_ATTRIBUTE_NOTHROW
+# if defined __cplusplus
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4
+#   if __cplusplus >= 201103L
+#    define _GL_ATTRIBUTE_NOTHROW noexcept (true)
+#   else
+#    define _GL_ATTRIBUTE_NOTHROW throw ()
+#   endif
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# else
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__
+#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# endif
+#endif
+
 /* Some platforms lack wchar_t.  */
 #if !@HAVE_WCHAR_T@
 # define wchar_t int
@@ -178,7 +200,7 @@ extern
 _Noreturn
 void abort (void)
 #  if defined __cplusplus && (__GLIBC__ >= 2)
-throw ()
+_GL_ATTRIBUTE_NOTHROW
 #  endif
 ;
 #  define unreachable() abort ()
diff --git a/tp/Texinfo/XS/gnulib/lib/stdio.in.h 
b/tp/Texinfo/XS/gnulib/lib/stdio.in.h
index 6be12c0525..118874d877 100644
--- a/tp/Texinfo/XS/gnulib/lib/stdio.in.h
+++ b/tp/Texinfo/XS/gnulib/lib/stdio.in.h
@@ -58,7 +58,8 @@
 #define _@GUARD_PREFIX@_STDIO_H
 
 /* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_FORMAT,
-   _GL_ATTRIBUTE_MALLOC, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */
+   _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NOTHROW, GNULIB_POSIXCHECK,
+   HAVE_RAW_DECL_*.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
@@ -143,6 +144,28 @@
 # endif
 #endif
 
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+#ifndef _GL_ATTRIBUTE_NOTHROW
+# if defined __cplusplus
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4
+#   if __cplusplus >= 201103L
+#    define _GL_ATTRIBUTE_NOTHROW noexcept (true)
+#   else
+#    define _GL_ATTRIBUTE_NOTHROW throw ()
+#   endif
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# else
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__
+#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# endif
+#endif
+
 /* An __attribute__ __format__ specifier for a function that takes a format
    string and arguments, where the format string directives are the ones
    standardized by ISO C99 and POSIX.
@@ -344,10 +367,18 @@ _GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char 
*mode));
 # else
 #  if __GNUC__ >= 11
 /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose.  */
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (fdopen, FILE *,
+                  (int fd, const char *mode)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)
+                  _GL_ATTRIBUTE_MALLOC);
+#   else
 _GL_FUNCDECL_SYS (fdopen, FILE *,
                   (int fd, const char *mode)
                   _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)
                   _GL_ATTRIBUTE_MALLOC);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode));
 # endif
@@ -355,10 +386,18 @@ _GL_CXXALIASWARN (fdopen);
 #else
 # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fdopen
 /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
 _GL_FUNCDECL_SYS (fdopen, FILE *,
                   (int fd, const char *mode)
+                  _GL_ATTRIBUTE_NOTHROW
                   _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)
                   _GL_ATTRIBUTE_MALLOC);
+#  else
+_GL_FUNCDECL_SYS (fdopen, FILE *,
+                  (int fd, const char *mode)
+                  _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)
+                  _GL_ATTRIBUTE_MALLOC);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK
 #  undef fdopen
diff --git a/tp/Texinfo/XS/gnulib/lib/stdlib.in.h 
b/tp/Texinfo/XS/gnulib/lib/stdlib.in.h
index 1479a2b287..b9838c7d5e 100644
--- a/tp/Texinfo/XS/gnulib/lib/stdlib.in.h
+++ b/tp/Texinfo/XS/gnulib/lib/stdlib.in.h
@@ -38,7 +38,8 @@
 #define _@GUARD_PREFIX@_STDLIB_H
 
 /* This file uses _Noreturn, _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
-   _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */
+   _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK,
+   HAVE_RAW_DECL_*.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
@@ -132,6 +133,28 @@ struct random_data
 # endif
 #endif
 
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+#ifndef _GL_ATTRIBUTE_NOTHROW
+# if defined __cplusplus
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4
+#   if __cplusplus >= 201103L
+#    define _GL_ATTRIBUTE_NOTHROW noexcept (true)
+#   else
+#    define _GL_ATTRIBUTE_NOTHROW throw ()
+#   endif
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# else
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__
+#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# endif
+#endif
+
 /* The __attribute__ feature is available in gcc versions 2.5 and later.
    The attribute __pure__ was added in gcc 2.96.  */
 #ifndef _GL_ATTRIBUTE_PURE
@@ -200,7 +223,7 @@ _GL_WARN_ON_USE (_Exit, "_Exit is unportable - "
 #   define free rpl_free
 #  endif
 #  if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
-_GL_FUNCDECL_RPL (free, void, (void *ptr) throw ());
+_GL_FUNCDECL_RPL (free, void, (void *ptr) _GL_ATTRIBUTE_NOTHROW);
 #  else
 _GL_FUNCDECL_RPL (free, void, (void *ptr));
 #  endif
@@ -234,9 +257,16 @@ _GL_CXXALIAS_RPL (aligned_alloc, void *, (size_t 
alignment, size_t size));
 #  if @HAVE_ALIGNED_ALLOC@
 #   if __GNUC__ >= 11
 /* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free.  */
+#    if __GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2
 _GL_FUNCDECL_SYS (aligned_alloc, void *,
                   (size_t alignment, size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#    else
+_GL_FUNCDECL_SYS (aligned_alloc, void *,
+                  (size_t alignment, size_t size)
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#    endif
 #   endif
 _GL_CXXALIAS_SYS (aligned_alloc, void *, (size_t alignment, size_t size));
 #  endif
@@ -247,9 +277,16 @@ _GL_CXXALIASWARN (aligned_alloc);
 #else
 # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined aligned_alloc
 /* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2
+_GL_FUNCDECL_SYS (aligned_alloc, void *,
+                  (size_t alignment, size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
 _GL_FUNCDECL_SYS (aligned_alloc, void *,
                   (size_t alignment, size_t size)
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK
 #  undef aligned_alloc
@@ -292,9 +329,16 @@ _GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t 
size));
 # else
 #  if __GNUC__ >= 11
 /* For -Wmismatched-dealloc: Associate calloc with free or rpl_free.  */
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2
+_GL_FUNCDECL_SYS (calloc, void *,
+                  (size_t nmemb, size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
 _GL_FUNCDECL_SYS (calloc, void *,
                   (size_t nmemb, size_t size)
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size));
 # endif
@@ -304,9 +348,16 @@ _GL_CXXALIASWARN (calloc);
 #else
 # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined calloc
 /* For -Wmismatched-dealloc: Associate calloc with free or rpl_free.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2
 _GL_FUNCDECL_SYS (calloc, void *,
                   (size_t nmemb, size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
+_GL_FUNCDECL_SYS (calloc, void *,
+                  (size_t nmemb, size_t size)
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK
 #  undef calloc
@@ -328,10 +379,18 @@ _GL_FUNCDECL_RPL (canonicalize_file_name, char *,
 _GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name));
 # else
 #  if !@HAVE_CANONICALIZE_FILE_NAME@ || __GNUC__ >= 11
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
 _GL_FUNCDECL_SYS (canonicalize_file_name, char *,
                   (const char *name)
+                  _GL_ATTRIBUTE_NOTHROW
                   _GL_ARG_NONNULL ((1))
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
+_GL_FUNCDECL_SYS (canonicalize_file_name, char *,
+                  (const char *name)
+                  _GL_ARG_NONNULL ((1))
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name));
 # endif
@@ -344,10 +403,18 @@ _GL_CXXALIASWARN (canonicalize_file_name);
 # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined canonicalize_file_name
 /* For -Wmismatched-dealloc: Associate canonicalize_file_name with free or
    rpl_free.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (canonicalize_file_name, char *,
+                  (const char *name)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ARG_NONNULL ((1))
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
 _GL_FUNCDECL_SYS (canonicalize_file_name, char *,
                   (const char *name)
                   _GL_ARG_NONNULL ((1))
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK
 #  undef canonicalize_file_name
@@ -569,9 +636,16 @@ _GL_CXXALIAS_RPL (malloc, void *, (size_t size));
 # else
 #  if __GNUC__ >= 11
 /* For -Wmismatched-dealloc: Associate malloc with free or rpl_free.  */
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2
+_GL_FUNCDECL_SYS (malloc, void *,
+                  (size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
 _GL_FUNCDECL_SYS (malloc, void *,
                   (size_t size)
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (malloc, void *, (size_t size));
 # endif
@@ -581,9 +655,16 @@ _GL_CXXALIASWARN (malloc);
 #else
 # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined malloc
 /* For -Wmismatched-dealloc: Associate malloc with free or rpl_free.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2
+_GL_FUNCDECL_SYS (malloc, void *,
+                  (size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
 _GL_FUNCDECL_SYS (malloc, void *,
                   (size_t size)
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
 #  undef malloc
@@ -1292,8 +1373,16 @@ _GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t 
size));
 # else
 #  if __GNUC__ >= 11
 /* For -Wmismatched-dealloc: Associate realloc with free or rpl_free.  */
-_GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size)
-                                   _GL_ATTRIBUTE_DEALLOC_FREE);
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2
+_GL_FUNCDECL_SYS (realloc, void *,
+                  (void *ptr, size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
+_GL_FUNCDECL_SYS (realloc, void *,
+                  (void *ptr, size_t size)
+                  _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size));
 # endif
@@ -1303,8 +1392,16 @@ _GL_CXXALIASWARN (realloc);
 #else
 # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined realloc
 /* For -Wmismatched-dealloc: Associate realloc with free or rpl_free.  */
-_GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size)
-                                   _GL_ATTRIBUTE_DEALLOC_FREE);
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2
+_GL_FUNCDECL_SYS (realloc, void *,
+                  (void *ptr, size_t size)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
+_GL_FUNCDECL_SYS (realloc, void *,
+                  (void *ptr, size_t size)
+                  _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC
 #  undef realloc
diff --git a/tp/Texinfo/XS/gnulib/lib/string.in.h 
b/tp/Texinfo/XS/gnulib/lib/string.in.h
index 912d0f7a30..8b62ae8fc9 100644
--- a/tp/Texinfo/XS/gnulib/lib/string.in.h
+++ b/tp/Texinfo/XS/gnulib/lib/string.in.h
@@ -45,7 +45,8 @@
 #define _@GUARD_PREFIX@_STRING_H
 
 /* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
-   _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */
+   _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK,
+   HAVE_RAW_DECL_*.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
@@ -110,6 +111,28 @@
 # endif
 #endif
 
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+#ifndef _GL_ATTRIBUTE_NOTHROW
+# if defined __cplusplus
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4
+#   if __cplusplus >= 201103L
+#    define _GL_ATTRIBUTE_NOTHROW noexcept (true)
+#   else
+#    define _GL_ATTRIBUTE_NOTHROW throw ()
+#   endif
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# else
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__
+#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# endif
+#endif
+
 /* The __attribute__ feature is available in gcc versions 2.5 and later.
    The attribute __pure__ was added in gcc 2.96.  */
 #ifndef _GL_ATTRIBUTE_PURE
@@ -133,7 +156,7 @@
       && !(defined __cplusplus && defined GNULIB_NAMESPACE))
 /* We can't do '#define free rpl_free' here.  */
 #  if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
-_GL_EXTERN_C void rpl_free (void *) throw ();
+_GL_EXTERN_C void rpl_free (void *) _GL_ATTRIBUTE_NOTHROW;
 #  else
 _GL_EXTERN_C void rpl_free (void *);
 #  endif
@@ -148,7 +171,7 @@ _GL_EXTERN_C
      void __cdecl free (void *);
 #  else
 #   if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
-_GL_EXTERN_C void free (void *) throw ();
+_GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW;
 #   else
 _GL_EXTERN_C void free (void *);
 #   endif
@@ -163,7 +186,7 @@ _GL_EXTERN_C
      void __cdecl free (void *);
 # else
 #  if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
-_GL_EXTERN_C void free (void *) throw ();
+_GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW;
 #  else
 _GL_EXTERN_C void free (void *);
 #  endif
@@ -266,9 +289,12 @@ _GL_CXXALIAS_SYS_CAST2 (memchr,
 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
          || defined __clang__)
-_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n) throw ());
+_GL_CXXALIASWARN1 (memchr, void *,
+                   (void *__s, int __c, size_t __n)
+                   _GL_ATTRIBUTE_NOTHROW);
 _GL_CXXALIASWARN1 (memchr, void const *,
-                   (void const *__s, int __c, size_t __n) throw ());
+                   (void const *__s, int __c, size_t __n)
+                   _GL_ATTRIBUTE_NOTHROW);
 # elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (memchr);
 # endif
@@ -368,8 +394,12 @@ _GL_CXXALIAS_SYS_CAST2 (memrchr,
 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
          || defined __clang__)
-_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t) throw ());
-_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t) throw 
());
+_GL_CXXALIASWARN1 (memrchr, void *,
+                   (void *, int, size_t)
+                   _GL_ATTRIBUTE_NOTHROW);
+_GL_CXXALIASWARN1 (memrchr, void const *,
+                   (void const *, int, size_t)
+                   _GL_ATTRIBUTE_NOTHROW);
 # elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (memrchr);
 # endif
@@ -416,9 +446,12 @@ _GL_CXXALIAS_SYS_CAST2 (rawmemchr,
 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
          || defined __clang__)
-_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in) throw ());
+_GL_CXXALIASWARN1 (rawmemchr, void *,
+                   (void *__s, int __c_in)
+                   _GL_ATTRIBUTE_NOTHROW);
 _GL_CXXALIASWARN1 (rawmemchr, void const *,
-                   (void const *__s, int __c_in) throw ());
+                   (void const *__s, int __c_in)
+                   _GL_ATTRIBUTE_NOTHROW);
 # else
 _GL_CXXALIASWARN (rawmemchr);
 # endif
@@ -538,9 +571,12 @@ _GL_CXXALIAS_SYS_CAST2 (strchrnul,
 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
          || defined __clang__)
-_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in) throw ());
+_GL_CXXALIASWARN1 (strchrnul, char *,
+                   (char *__s, int __c_in)
+                   _GL_ATTRIBUTE_NOTHROW);
 _GL_CXXALIASWARN1 (strchrnul, char const *,
-                   (char const *__s, int __c_in) throw ());
+                   (char const *__s, int __c_in)
+                   _GL_ATTRIBUTE_NOTHROW);
 # elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (strchrnul);
 # endif
@@ -576,10 +612,18 @@ _GL_CXXALIAS_MDA (strdup, char *, (char const *__s));
 #   undef strdup
 #  endif
 #  if (!@HAVE_DECL_STRDUP@ || __GNUC__ >= 11) && !defined strdup
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (strdup, char *,
+                  (char const *__s)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ARG_NONNULL ((1))
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
 _GL_FUNCDECL_SYS (strdup, char *,
                   (char const *__s)
                   _GL_ARG_NONNULL ((1))
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
 # endif
@@ -587,10 +631,18 @@ _GL_CXXALIASWARN (strdup);
 #else
 # if __GNUC__ >= 11 && !defined strdup
 /* For -Wmismatched-dealloc: Associate strdup with free or rpl_free.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (strdup, char *,
+                  (char const *__s)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ARG_NONNULL ((1))
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
 _GL_FUNCDECL_SYS (strdup, char *,
                   (char const *__s)
                   _GL_ARG_NONNULL ((1))
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK
 #  undef strdup
@@ -659,10 +711,18 @@ _GL_FUNCDECL_RPL (strndup, char *,
 _GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n));
 # else
 #  if !@HAVE_DECL_STRNDUP@ || (__GNUC__ >= 11 && !defined strndup)
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
 _GL_FUNCDECL_SYS (strndup, char *,
                   (char const *__s, size_t __n)
+                  _GL_ATTRIBUTE_NOTHROW
                   _GL_ARG_NONNULL ((1))
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
+_GL_FUNCDECL_SYS (strndup, char *,
+                  (char const *__s, size_t __n)
+                  _GL_ARG_NONNULL ((1))
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n));
 # endif
@@ -670,10 +730,18 @@ _GL_CXXALIASWARN (strndup);
 #else
 # if __GNUC__ >= 11 && !defined strndup
 /* For -Wmismatched-dealloc: Associate strndup with free or rpl_free.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (strndup, char *,
+                  (char const *__s, size_t __n)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ARG_NONNULL ((1))
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
 _GL_FUNCDECL_SYS (strndup, char *,
                   (char const *__s, size_t __n)
                   _GL_ARG_NONNULL ((1))
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK
 #  undef strndup
@@ -742,9 +810,12 @@ _GL_CXXALIAS_SYS_CAST2 (strpbrk,
 # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
          || defined __clang__)
-_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept) throw 
());
+_GL_CXXALIASWARN1 (strpbrk, char *,
+                   (char *__s, char const *__accept)
+                   _GL_ATTRIBUTE_NOTHROW);
 _GL_CXXALIASWARN1 (strpbrk, char const *,
-                   (char const *__s, char const *__accept) throw ());
+                   (char const *__s, char const *__accept)
+                   _GL_ATTRIBUTE_NOTHROW);
 # elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (strpbrk);
 # endif
@@ -852,9 +923,11 @@ _GL_CXXALIAS_SYS_CAST2 (strstr,
      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
          || defined __clang__)
 _GL_CXXALIASWARN1 (strstr, char *,
-                   (char *haystack, const char *needle) throw ());
+                   (char *haystack, const char *needle)
+                   _GL_ATTRIBUTE_NOTHROW);
 _GL_CXXALIASWARN1 (strstr, const char *,
-                   (const char *haystack, const char *needle) throw ());
+                   (const char *haystack, const char *needle)
+                   _GL_ATTRIBUTE_NOTHROW);
 # elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (strstr);
 # endif
@@ -903,9 +976,11 @@ _GL_CXXALIAS_SYS_CAST2 (strcasestr,
      && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \
          || defined __clang__)
 _GL_CXXALIASWARN1 (strcasestr, char *,
-                   (char *haystack, const char *needle) throw ());
+                   (char *haystack, const char *needle)
+                   _GL_ATTRIBUTE_NOTHROW);
 _GL_CXXALIASWARN1 (strcasestr, const char *,
-                   (const char *haystack, const char *needle) throw ());
+                   (const char *haystack, const char *needle)
+                   _GL_ATTRIBUTE_NOTHROW);
 # elif __GLIBC__ >= 2
 _GL_CXXALIASWARN (strcasestr);
 # endif
diff --git a/tp/Texinfo/XS/gnulib/lib/verify.h 
b/tp/Texinfo/XS/gnulib/lib/verify.h
index e4af91517e..181dc6c292 100644
--- a/tp/Texinfo/XS/gnulib/lib/verify.h
+++ b/tp/Texinfo/XS/gnulib/lib/verify.h
@@ -188,9 +188,9 @@ template <int w>
     _gl_verify_type<(R) ? 1 : -1>
 #elif defined _GL_HAVE__STATIC_ASSERT
 # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
-    struct {                                   \
-      _Static_assert (R, DIAGNOSTIC);          \
-      int _gl_dummy;                          \
+    struct { \
+      _Static_assert (R, DIAGNOSTIC); \
+      int _gl_dummy; \
     }
 #else
 # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
@@ -212,8 +212,8 @@ template <int w>
 #elif defined _GL_HAVE__STATIC_ASSERT
 # define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC)
 #else
-# define _GL_VERIFY(R, DIAGNOSTIC, ...)                                \
-    extern int (*_GL_GENSYM (_gl_verify_function) (void))             \
+# define _GL_VERIFY(R, DIAGNOSTIC, ...) \
+    extern int (*_GL_GENSYM (_gl_verify_function) (void)) \
       [_GL_VERIFY_TRUE (R, DIAGNOSTIC)]
 # if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
 #  pragma GCC diagnostic ignored "-Wnested-externs"
diff --git a/tp/Texinfo/XS/gnulib/lib/wchar.in.h 
b/tp/Texinfo/XS/gnulib/lib/wchar.in.h
index 510f202537..f1bbff6b94 100644
--- a/tp/Texinfo/XS/gnulib/lib/wchar.in.h
+++ b/tp/Texinfo/XS/gnulib/lib/wchar.in.h
@@ -85,7 +85,8 @@
 #define _@GUARD_PREFIX@_WCHAR_H
 
 /* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_MALLOC,
-   _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */
+   _GL_ATTRIBUTE_NOTHROW, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK,
+   HAVE_RAW_DECL_*.  */
 #if !_GL_CONFIG_H_INCLUDED
  #error "Please include config.h first."
 #endif
@@ -136,6 +137,28 @@
 # endif
 #endif
 
+/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
+ */
+#ifndef _GL_ATTRIBUTE_NOTHROW
+# if defined __cplusplus
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4
+#   if __cplusplus >= 201103L
+#    define _GL_ATTRIBUTE_NOTHROW noexcept (true)
+#   else
+#    define _GL_ATTRIBUTE_NOTHROW throw ()
+#   endif
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# else
+#  if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__
+#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
+# endif
+#endif
+
 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
 
 /* The definition of _GL_ARG_NONNULL is copied here.  */
@@ -195,7 +218,7 @@ typedef int rpl_mbstate_t;
       && !(defined __cplusplus && defined GNULIB_NAMESPACE))
 /* We can't do '#define free rpl_free' here.  */
 #  if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
-_GL_EXTERN_C void rpl_free (void *) throw ();
+_GL_EXTERN_C void rpl_free (void *) _GL_ATTRIBUTE_NOTHROW;
 #  else
 _GL_EXTERN_C void rpl_free (void *);
 #  endif
@@ -210,7 +233,7 @@ _GL_EXTERN_C
      void __cdecl free (void *);
 #  else
 #   if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
-_GL_EXTERN_C void free (void *) throw ();
+_GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW;
 #   else
 _GL_EXTERN_C void free (void *);
 #   endif
@@ -225,7 +248,7 @@ _GL_EXTERN_C
      void __cdecl free (void *);
 # else
 #  if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2)
-_GL_EXTERN_C void free (void *) throw ();
+_GL_EXTERN_C void free (void *) _GL_ATTRIBUTE_NOTHROW;
 #  else
 _GL_EXTERN_C void free (void *);
 #  endif
@@ -1303,9 +1326,16 @@ _GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s));
    namespace, not in the global namespace.  So, force a declaration in
    the global namespace.  */
 #  if !@HAVE_WCSDUP@ || (defined __sun && defined __cplusplus) || __GNUC__ >= 
11
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
+                  (const wchar_t *s)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
 _GL_FUNCDECL_SYS (wcsdup, wchar_t *,
                   (const wchar_t *s)
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #  endif
 _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
 # endif
@@ -1313,9 +1343,16 @@ _GL_CXXALIASWARN (wcsdup);
 #else
 # if __GNUC__ >= 11 && !defined wcsdup
 /* For -Wmismatched-dealloc: Associate wcsdup with free or rpl_free.  */
+#  if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
+                  (const wchar_t *s)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  else
 _GL_FUNCDECL_SYS (wcsdup, wchar_t *,
                   (const wchar_t *s)
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#  endif
 # endif
 # if defined GNULIB_POSIXCHECK
 #  undef wcsdup
@@ -1334,9 +1371,16 @@ _GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
 #   endif
 _GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s));
 #  else
+#   if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *,
+                  (const wchar_t *s)
+                  _GL_ATTRIBUTE_NOTHROW
+                  _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   else
 _GL_FUNCDECL_SYS (wcsdup, wchar_t *,
                   (const wchar_t *s)
                   _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE);
+#   endif
 #   if @HAVE_DECL_WCSDUP@
 _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
 #   endif
diff --git a/tp/Texinfo/XS/gnulib/lib/wctype.in.h 
b/tp/Texinfo/XS/gnulib/lib/wctype.in.h
index fd52715a8a..6f1e7ef149 100644
--- a/tp/Texinfo/XS/gnulib/lib/wctype.in.h
+++ b/tp/Texinfo/XS/gnulib/lib/wctype.in.h
@@ -133,7 +133,7 @@ typedef unsigned int rpl_wint_t;
    Linux libc5 has <wctype.h> and the functions but they are broken.
    mingw and MSVC have <wctype.h> and the functions but they take a wchar_t
    as argument, not an rpl_wint_t.  Additionally, the mingw iswprint function
-   is broken.
+   and the Android iswpunct function are broken.
    Assume all 11 functions (all isw* except iswblank) are implemented the
    same way, or not at all.  */
 # if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
@@ -494,6 +494,16 @@ _GL_FUNCDECL_RPL (iswdigit, int, (wint_t wc));
 #   endif
 #  endif
 
+#  if @GNULIB_ISWPUNCT@
+#   if @REPLACE_ISWPUNCT@
+#    if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#     undef iswpunct
+#     define iswpunct rpl_iswpunct
+#    endif
+_GL_FUNCDECL_RPL (iswpunct, int, (wint_t wc));
+#   endif
+#  endif
+
 #  if @GNULIB_ISWXDIGIT@
 #   if @REPLACE_ISWXDIGIT@
 #    if !(defined __cplusplus && defined GNULIB_NAMESPACE)
diff --git a/tp/Texinfo/XS/gnulib/lib/xalloc-oversized.h 
b/tp/Texinfo/XS/gnulib/lib/xalloc-oversized.h
index 5dbdfb5506..483bd11796 100644
--- a/tp/Texinfo/XS/gnulib/lib/xalloc-oversized.h
+++ b/tp/Texinfo/XS/gnulib/lib/xalloc-oversized.h
@@ -48,13 +48,13 @@
 #if 7 <= __GNUC__ && !defined __clang__ && PTRDIFF_MAX < SIZE_MAX
 # define xalloc_oversized(n, s) \
    __builtin_mul_overflow_p (n, s, (ptrdiff_t) 1)
-#elif (5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__ \
-       && PTRDIFF_MAX < SIZE_MAX)
+#elif 5 <= __GNUC__ && !defined __ICC && PTRDIFF_MAX < SIZE_MAX
 # define xalloc_oversized(n, s) \
    (__builtin_constant_p (n) && __builtin_constant_p (s) \
     ? __xalloc_oversized (n, s) \
-    : ({ ptrdiff_t __xalloc_count; \
-         __builtin_mul_overflow (n, s, &__xalloc_count); }))
+    : __extension__ \
+        ({ ptrdiff_t __xalloc_count; \
+           __builtin_mul_overflow (n, s, &__xalloc_count); }))
 
 /* Other compilers use integer division; this may be slower but is
    more portable.  */
diff --git a/tp/Texinfo/XS/gnulib/m4/gnulib-common.m4 
b/tp/Texinfo/XS/gnulib/m4/gnulib-common.m4
index 2426eb6398..c372316135 100644
--- a/tp/Texinfo/XS/gnulib/m4/gnulib-common.m4
+++ b/tp/Texinfo/XS/gnulib/m4/gnulib-common.m4
@@ -1,4 +1,4 @@
-# gnulib-common.m4 serial 87
+# gnulib-common.m4 serial 88
 dnl Copyright (C) 2007-2023 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -466,11 +466,25 @@ AC_DEFUN([gl_COMMON_BODY], [
 /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions.
  */
 /* Applies to: functions.  */
+/* After a function's parameter list, this attribute must come first, before
+   other attributes.  */
 #ifndef _GL_ATTRIBUTE_NOTHROW
-# if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus
-#  define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+# if defined __cplusplus
+#  if _GL_GNUC_PREREQ (2, 8) || __clang_major >= 4
+#   if __cplusplus >= 201103L
+#    define _GL_ATTRIBUTE_NOTHROW noexcept (true)
+#   else
+#    define _GL_ATTRIBUTE_NOTHROW throw ()
+#   endif
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
 # else
-#  define _GL_ATTRIBUTE_NOTHROW
+#  if _GL_HAS_ATTRIBUTE (nothrow)
+#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__))
+#  else
+#   define _GL_ATTRIBUTE_NOTHROW
+#  endif
 # endif
 #endif
 
diff --git a/tp/Texinfo/XS/gnulib/m4/wctype_h.m4 
b/tp/Texinfo/XS/gnulib/m4/wctype_h.m4
index 43a2d9cf10..ac9c35b2da 100644
--- a/tp/Texinfo/XS/gnulib/m4/wctype_h.m4
+++ b/tp/Texinfo/XS/gnulib/m4/wctype_h.m4
@@ -1,4 +1,4 @@
-# wctype_h.m4 serial 32
+# wctype_h.m4 serial 33
 
 dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
 
@@ -178,6 +178,7 @@ AC_DEFUN([gl_WCTYPE_H_REQUIRE_DEFAULTS],
   m4_defun(GL_MODULE_INDICATOR_PREFIX[_WCTYPE_H_MODULE_INDICATOR_DEFAULTS], [
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWBLANK])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWDIGIT])
+    gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWPUNCT])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWXDIGIT])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTYPE])
     gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWCTYPE])
@@ -196,6 +197,7 @@ AC_DEFUN([gl_WCTYPE_H_DEFAULTS],
   HAVE_WCTRANS_T=1;     AC_SUBST([HAVE_WCTRANS_T])
   REPLACE_ISWBLANK=0;   AC_SUBST([REPLACE_ISWBLANK])
   REPLACE_ISWDIGIT=0;   AC_SUBST([REPLACE_ISWDIGIT])
+  REPLACE_ISWPUNCT=0;   AC_SUBST([REPLACE_ISWPUNCT])
   REPLACE_ISWXDIGIT=0;  AC_SUBST([REPLACE_ISWXDIGIT])
   REPLACE_WCTRANS=0;    AC_SUBST([REPLACE_WCTRANS])
   REPLACE_WCTYPE=0;     AC_SUBST([REPLACE_WCTYPE])



reply via email to

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