On Windows (x86_64-w64-mingw32), I see the following warning:

    $ gnulib-tool --create-testdir --dir testdir1
    $ cd testdir1
    $ ./configure CFLAGS='-Wdiscarded-qualifiers'
    $ cd glllib
    $ make setlocale.o
    depbase=`echo setlocale.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
    gcc -DHAVE_CONFIG_H -DEXEEXT=\".exe\" -DEXEEXT=\".exe\" -DNO_XMALLOC 
-DEXEEXT=\".exe\" -I. -I..  -DGNULIB_STRICT_CHECKING=1 -I/mingw64/include  
-Wdiscarded-qualifiers -MT setlocale.o -MD -MP -MF $depbase.Tpo -c -o 
setlocale.o setlocale.c &&\
    mv -f $depbase.Tpo $depbase.Po
    setlocale.c: In function 'setlocale_single':
    setlocale.c:889:12: warning: return discards 'const' qualifier from pointer 
target type [-Wdiscarded-qualifiers]
      889 |     return setlocale_messages (locale);
          |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~

The attached patch fixes it by casting away the const. Another
reasonable solution is changing the definition of setlocale_messages to
return a plain "char *". However, I think it would be a bit strange for
it to have a different prototype than setlocale_messages_null. I've left
it unpushed in case you prefer the other solution, Bruno.

Collin

>From 868ed28fde7b9d1b8176303b6aba205170dc4559 Mon Sep 17 00:00:00 2001
Message-ID: <868ed28fde7b9d1b8176303b6aba205170dc4559.1780797990.git.collin.fu...@gmail.com>
From: Collin Funk <[email protected]>
Date: Sat, 6 Jun 2026 19:05:41 -0700
Subject: [PATCH] setlocale: Silence a -Wdiscarded-qualifiers warning on
 Windows.

* lib/setlocale.c (setlocale_single): Cast away the const from
setlocale_messages.
---
 ChangeLog       | 6 ++++++
 lib/setlocale.c | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index e194208c19..d788795f59 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2026-06-06  Collin Funk  <[email protected]>
+
+	setlocale: Silence a -Wdiscarded-qualifiers warning on Windows.
+	* lib/setlocale.c (setlocale_single): Cast away the const from
+	setlocale_messages.
+
 2026-06-06  Bruno Haible  <[email protected]>
 
 	mbrtowc: Fix handling of s==NULL on all possible platforms.
diff --git a/lib/setlocale.c b/lib/setlocale.c
index d40e1e2efd..adaefec8a1 100644
--- a/lib/setlocale.c
+++ b/lib/setlocale.c
@@ -886,7 +886,7 @@ static char *
 setlocale_single (int category, const char *locale)
 {
   if (category == LC_MESSAGES)
-    return setlocale_messages (locale);
+    return (char *) setlocale_messages (locale);
   else
     return setlocale_unixlike (category, locale);
 }
-- 
2.54.0

Reply via email to