Imported Upstream version 1.4.19
[platform/upstream/m4.git] / tests / test-stdbool.c
index 45dc837..60e5242 100644 (file)
@@ -1,5 +1,5 @@
 /* Test of <stdbool.h> substitute.
-   Copyright (C) 2002-2007, 2009-2016 Free Software Foundation, Inc.
+   Copyright (C) 2002-2007, 2009-2021 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
 
-/* We want this test to succeed even when using gcc's -Werror; but to
-   do that requires a pragma that didn't exist before 4.3.0.  */
-#ifndef __GNUC__
+/* Define ADDRESS_CHECK_OKAY if it is OK to assign an address to a 'bool'
+   and this does not generate a warning (because we want this test to succeed
+   even when using gcc's -Werror).  */
+#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) \
+    || (__clang_major__ >= 4)
+/* We can silence the warning.  */
+# pragma GCC diagnostic ignored "-Waddress"
 # define ADDRESS_CHECK_OKAY
-#elif __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3)
-/* No way to silence -Waddress.  */
+#elif defined __GNUC__ || defined __clang__
+/* There may be a warning.  */
 #else
-# pragma GCC diagnostic ignored "-Waddress"
+/* Ignore warnings from other compilers.  */
 # define ADDRESS_CHECK_OKAY
 #endif
 
 
 /* Several tests cannot be guaranteed with gnulib's <stdbool.h>, at
    least, not for all compilers and compiler options.  */
-#if HAVE_STDBOOL_H || 3 <= __GNUC__
+#if HAVE_STDBOOL_H || 3 <= __GNUC__ || 4 <= __clang_major__
 struct s { _Bool s: 1; _Bool t; } s;
 #endif
 
 char a[true == 1 ? 1 : -1];
 char b[false == 0 ? 1 : -1];
 char c[__bool_true_false_are_defined == 1 ? 1 : -1];
-#if HAVE_STDBOOL_H || 3 <= __GNUC__ /* See above.  */
+#if HAVE_STDBOOL_H || 3 <= __GNUC__ || 4 <= __clang_major__ /* See above.  */
 char d[(bool) 0.5 == true ? 1 : -1];
 # ifdef ADDRESS_CHECK_OKAY /* Avoid gcc warning.  */
 /* C99 may plausibly be interpreted as not requiring support for a cast from
    a variable's address to bool in a static initializer.  So treat it like a
    GCC extension.  */
-#  ifdef __GNUC__
+#  if defined __GNUC__ || defined __clang__
 bool e = &s;
 #  endif
 # endif
@@ -73,7 +77,7 @@ char f[(_Bool) 0.0 == false ? 1 : -1];
 #endif
 char g[true];
 char h[sizeof (_Bool)];
-#if HAVE_STDBOOL_H || 3 <= __GNUC__ /* See above.  */
+#if HAVE_STDBOOL_H || 3 <= __GNUC__ || 4 <= __clang_major__ /* See above.  */
 char i[sizeof s.t];
 #endif
 enum { j = false, k = true, l = false * true, m = true * 256 };
@@ -81,8 +85,8 @@ _Bool n[m];
 char o[sizeof n == m * sizeof n[0] ? 1 : -1];
 char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
 /* Catch a bug in an HP-UX C compiler.  See
-   http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-   http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+   https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+   https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html
  */
 _Bool q = true;
 _Bool *pq = &q;
@@ -92,7 +96,7 @@ main ()
 {
   int error = 0;
 
-#if HAVE_STDBOOL_H || 3 <= __GNUC__ /* See above.  */
+#if HAVE_STDBOOL_H || 3 <= __GNUC_ || 4 <= __clang_major___ /* See above.  */
 # ifdef ADDRESS_CHECK_OKAY /* Avoid gcc warning.  */
   /* A cast from a variable's address to bool is valid in expressions.  */
   {
@@ -105,7 +109,7 @@ main ()
 
   /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
      reported by James Lemley on 2005-10-05; see
-     http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
+     https://lists.gnu.org/r/bug-coreutils/2005-10/msg00086.html
      This is a runtime test, since a corresponding compile-time
      test would rely on initializer extensions.  */
   {