Re: N3322 functionality tests

Lasse Collin <[email protected]>
Newsgroups gmane.comp.lib.gnulib.bugs
Message-ID <[email protected]>
On 2026-08-12 Bruno Haible wrote:
> The multiplatform CI shows two test failures on mingw (that I can
> reproduce locally):
[...]
> They are probably due to the definition of wmemcpy and wmemmove as
> inline functions (that redirect to memcpy and memmove, respectively)
> in mingw's <wchar.h>.
> 
> How should we handle this? Just skip the tests #if defined
> __MINGW32__ ? Or do you see something better?

I didn't run the tests now, but I cross-compiled and looked at the
assembly. The code looks good with GCC 16.1 + mingw-w64 14.0.0. If you
tested with GCC < 15, then the attached patch should fix it.

-- 
Lasse Collin
0001-tests-Fix-test-wmemcpy-and-test-wmemmove-on-mingw-w6.patch (text/x-patch, 2.5 KB)
From da247b4e520b652a7c6184277211d7222b588b47 Mon Sep 17 00:00:00 2001
From: Lasse Collin <[email protected]>
Date: Wed, 12 Aug 2026 22:59:13 +0300
Subject: [PATCH] tests: Fix test-wmemcpy and test-wmemmove on mingw-w64 + GCC
 < 15

* tests/test-wmemcpy.c: Exclude the N3322 test null_wmemcpy on
mingw-w64 && GCC < 15.
* tests/test-wmemmove.c: Likewise for null_wmemmove.
---
 ChangeLog             | 7 +++++++
 tests/test-wmemcpy.c  | 7 ++++++-
 tests/test-wmemmove.c | 7 ++++++-
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index fe2bd22dd8..2f078b7cc7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2026-08-12  Lasse Collin  <[email protected]>
+
+	tests: Fix test-wmemcpy and test-wmemmove on mingw-w64 + GCC < 15.
+	* tests/test-wmemcpy.c: Exclude the N3322 test null_wmemcpy on
+	mingw-w64 && GCC < 15.
+	* tests/test-wmemmove.c: Likewise for null_wmemmove.
+
 2026-08-12  Bruno Haible  <[email protected]>
 
 	omap-c++: Avoid clang UBSAN runtime errors.
diff --git a/tests/test-wmemcpy.c b/tests/test-wmemcpy.c
index 9f4da1e424..b66a0140ff 100644
--- a/tests/test-wmemcpy.c
+++ b/tests/test-wmemcpy.c
@@ -23,12 +23,17 @@
 
 #include "macros.h"
 
-/* Test the prototype in <wchar.h> + compiler.  */
+/* Test the prototype in <wchar.h> + compiler.
+   In mingw-w64 14.0.0, wmemcpy is an inline function that calls memcpy.
+   In GCC < 15, memcpy is a builtin that has the nonnull attribute.  */
 static wchar_t *
 null_wmemcpy (wchar_t *s1, wchar_t const *s2, size_t n)
 {
   wchar_t *p = wmemcpy (s1, s2, n);
+#if ! defined __MINGW32__ \
+    || ! defined __GNUC__ || __GNUC__ >= 15 || defined __clang__
   ASSERT (s1 == NULL);
+#endif
   return p;
 }
 static wchar_t *(*volatile volatile_null_wmemcpy) (wchar_t *, wchar_t const *,
diff --git a/tests/test-wmemmove.c b/tests/test-wmemmove.c
index f02be6b092..758dc8b3d2 100644
--- a/tests/test-wmemmove.c
+++ b/tests/test-wmemmove.c
@@ -23,12 +23,17 @@
 
 #include "macros.h"
 
-/* Test the prototype in <wchar.h> + compiler.  */
+/* Test the prototype in <wchar.h> + compiler.
+   In mingw-w64 14.0.0, wmemmove is an inline function that calls memmove.
+   In GCC < 15, memmove is a builtin that has the nonnull attribute.  */
 static wchar_t *
 null_wmemmove (wchar_t *s1, wchar_t const *s2, size_t n)
 {
   wchar_t *p = wmemmove (s1, s2, n);
+#if ! defined __MINGW32__ \
+    || ! defined __GNUC__ || __GNUC__ >= 15 || defined __clang__
   ASSERT (s1 == NULL);
+#endif
   return p;
 }
 static wchar_t *(*volatile volatile_null_wmemmove) (wchar_t *, wchar_t const *,
-- 
2.55.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.