From 3b67980c26e94599caaa60122941fe1bcce8c04c Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Wed, 30 Oct 2024 15:56:41 +0100 Subject: [PATCH] assert-h, stdbool: Fix compilation error with MSVC 14 (regr. yesterday). * m4/assert_h.m4 (gl_ASSERT_H): Add parentheses to the preprocessor expression. * m4/c-bool.m4 (gl_C_BOOL): Likewise. --- ChangeLog | 7 +++++++ m4/assert_h.m4 | 18 +++++++++++------- m4/c-bool.m4 | 20 ++++++++++++++------ 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8484e2d261..83143af50f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2024-10-30 Bruno Haible + + assert-h, stdbool: Fix compilation error with MSVC 14 (regr. yesterday). + * m4/assert_h.m4 (gl_ASSERT_H): Add parentheses to the preprocessor + expression. + * m4/c-bool.m4 (gl_C_BOOL): Likewise. + 2024-10-29 Paul Eggert malloc, realloc: sync from Autoconf master diff --git a/m4/assert_h.m4 b/m4/assert_h.m4 index 9bdb3c4f03..8f772f0a63 100644 --- a/m4/assert_h.m4 +++ b/m4/assert_h.m4 @@ -1,5 +1,5 @@ # assert_h.m4 -# serial 2 +# serial 3 dnl Copyright (C) 2011-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -50,6 +50,10 @@ AC_DEFUN([gl_ASSERT_H], dnl The "zz" puts this toward config.h's end, to avoid potential dnl collisions with other definitions. + dnl Hardcode the known configuration results for GCC and clang, so that + dnl a configuration made with the C compiler works also with the C++ compiler + dnl and vice versa. + dnl The seemingly redundant parentheses are necessary for MSVC 14. dnl #undef assert so that programs are not tempted to use it without dnl specifically including assert.h. dnl #undef __ASSERT_H__ so that on IRIX, when programs later include @@ -60,12 +64,12 @@ AC_DEFUN([gl_ASSERT_H], [#if (!(defined __clang__ \ ? (defined __cplusplus \ ? __cplusplus >= 201703L \ - : __STDC_VERSION__ >= 202000L && __clang_major__ >= 16) : \ - defined __GNUC__ \ - ? (defined __cplusplus \ - ? __cplusplus >= 201103L && __GNUG__ >= 6 \ - : __STDC_VERSION__ >= 202000L && __GNUC__ >= 13) : \ - defined HAVE_C_STATIC_ASSERT) \ + : __STDC_VERSION__ >= 202000L && __clang_major__ >= 16) \ + : (defined __GNUC__ \ + ? (defined __cplusplus \ + ? __cplusplus >= 201103L && __GNUG__ >= 6 \ + : __STDC_VERSION__ >= 202000L && __GNUC__ >= 13) \ + : defined HAVE_C_STATIC_ASSERT)) \ && !defined assert \ && (!defined __cplusplus \ || (__cpp_static_assert < 201411 \ diff --git a/m4/c-bool.m4 b/m4/c-bool.m4 index 8ea186d1cf..fa792b12a1 100644 --- a/m4/c-bool.m4 +++ b/m4/c-bool.m4 @@ -1,5 +1,5 @@ # c-bool.m4 -# serial 2 +# serial 3 dnl Copyright 2022-2024 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -30,15 +30,23 @@ AC_DEFUN([gl_C_BOOL], dnl The "zz" puts this toward config.h's end, to avoid potential dnl collisions with other definitions. dnl If 'bool', 'true' and 'false' do not work, arrange for them to work. - dnl In C, this means including if it is not already included. + dnl Hardcode the known configuration results for GCC and clang, so that + dnl a configuration made with the C compiler works also with the C++ compiler + dnl and vice versa. + dnl The seemingly redundant parentheses are necessary for MSVC 14. + dnl "Arrange for them to work", in C, means including if it is + dnl not already included. dnl However, if the preprocessor mistakenly treats 'true' as 0, dnl define it to a bool expression equal to 1; this is needed in dnl Sun C++ 5.11 (Oracle Solaris Studio 12.2, 2010) and older. AH_VERBATIM([zzbool], -[#if !(defined __cplusplus ? 1 : \ - defined __clang__ ? __STDC_VERSION__ >= 202000L && __clang_major__ >= 15 : \ - defined __GNUC__ ? __STDC_VERSION__ >= 202000L && __GNUC__ >= 13 : \ - defined HAVE_C_BOOL) +[#if !(defined __cplusplus \ + ? 1 \ + : (defined __clang__ \ + ? __STDC_VERSION__ >= 202000L && __clang_major__ >= 15 \ + : (defined __GNUC__ \ + ? __STDC_VERSION__ >= 202000L && __GNUC__ >= 13 \ + : defined HAVE_C_BOOL))) # if !defined __cplusplus && !defined __bool_true_false_are_defined # if HAVE_STDBOOL_H # include -- 2.39.5