On OpenBSD 7.6 I see this compiler warning:

../../../../gettext-runtime/intl/gnulib-lib/getlocalename_l-unsafe.c:337:7: 
warning: comparison of nonnull parameter 'locale' equal to a null pointer is 
'false' on first encounter [-Wtautological-pointer-compare]
  if (locale == NULL)
      ^~~~~~    ~~~~
./locale.h:878:59: note: declared 'nonnull' here
_GL_FUNCDECL_RPL (duplocale, locale_t, (locale_t locale), _GL_ARG_NONNULL 
((1)));
                                                          ^
./locale.h:442:51: note: expanded from macro '_GL_ARG_NONNULL'
#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
                                                  ^
../../../../gettext-runtime/intl/gnulib-lib/getlocalename_l-unsafe.c:429:7: 
warning: comparison of nonnull parameter 'locale' equal to a null pointer is 
'false' on first encounter [-Wtautological-pointer-compare]
  if (locale == NULL || locale == LC_GLOBAL_LOCALE)
      ^~~~~~    ~~~~
./locale.h:904:56: note: declared 'nonnull' here
_GL_FUNCDECL_RPL (freelocale, void, (locale_t locale), _GL_ARG_NONNULL ((1)));
                                                       ^
./locale.h:442:51: note: expanded from macro '_GL_ARG_NONNULL'
#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
                                                  ^

Indicating that the compiler is not emitting code for the 'locale == NULL'
check.

This patch should fix it.


2025-04-24  Bruno Haible  <br...@clisp.org>

        getlocalename_l-unsafe: Disable unwanted compiler optimization.
        * lib/getlocalename_l-unsafe.c (_GL_ARG_NONNULL): Define to empty.

diff --git a/lib/getlocalename_l-unsafe.c b/lib/getlocalename_l-unsafe.c
index 6a72c81192..cb7ae5e5ea 100644
--- a/lib/getlocalename_l-unsafe.c
+++ b/lib/getlocalename_l-unsafe.c
@@ -14,6 +14,10 @@
    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/>.  */
 
+/* Don't use __attribute__ __nonnull__ in this compilation unit.  Otherwise gcc
+   optimizes away the locale == NULL tests below.  */
+#define _GL_ARG_NONNULL(params)
+
 #include <config.h>
 
 /* Specification.  */




Reply via email to