summaryrefslogtreecommitdiffstats
path: root/gl/m4/stdbool.m4
diff options
context:
space:
mode:
Diffstat (limited to 'gl/m4/stdbool.m4')
-rw-r--r--gl/m4/stdbool.m4140
1 files changed, 70 insertions, 70 deletions
diff --git a/gl/m4/stdbool.m4 b/gl/m4/stdbool.m4
index 57c804a8..3d672d74 100644
--- a/gl/m4/stdbool.m4
+++ b/gl/m4/stdbool.m4
@@ -1,6 +1,6 @@
1# Check for stdbool.h that conforms to C99. 1# Check for stdbool.h that conforms to C99.
2 2
3dnl Copyright (C) 2002-2006, 2009 Free Software Foundation, Inc. 3dnl Copyright (C) 2002-2006, 2009-2010 Free Software Foundation, Inc.
4dnl This file is free software; the Free Software Foundation 4dnl This file is free software; the Free Software Foundation
5dnl gives unlimited permission to copy and/or distribute it, 5dnl gives unlimited permission to copy and/or distribute it,
6dnl with or without modifications, as long as this notice is preserved. 6dnl with or without modifications, as long as this notice is preserved.
@@ -38,77 +38,77 @@ AC_DEFUN([AC_HEADER_STDBOOL],
38 [AC_CACHE_CHECK([for stdbool.h that conforms to C99], 38 [AC_CACHE_CHECK([for stdbool.h that conforms to C99],
39 [ac_cv_header_stdbool_h], 39 [ac_cv_header_stdbool_h],
40 [AC_TRY_COMPILE( 40 [AC_TRY_COMPILE(
41 [ 41 [
42 #include <stdbool.h> 42 #include <stdbool.h>
43 #ifndef bool 43 #ifndef bool
44 "error: bool is not defined" 44 "error: bool is not defined"
45 #endif 45 #endif
46 #ifndef false 46 #ifndef false
47 "error: false is not defined" 47 "error: false is not defined"
48 #endif 48 #endif
49 #if false 49 #if false
50 "error: false is not 0" 50 "error: false is not 0"
51 #endif 51 #endif
52 #ifndef true 52 #ifndef true
53 "error: true is not defined" 53 "error: true is not defined"
54 #endif 54 #endif
55 #if true != 1 55 #if true != 1
56 "error: true is not 1" 56 "error: true is not 1"
57 #endif 57 #endif
58 #ifndef __bool_true_false_are_defined 58 #ifndef __bool_true_false_are_defined
59 "error: __bool_true_false_are_defined is not defined" 59 "error: __bool_true_false_are_defined is not defined"
60 #endif 60 #endif
61 61
62 struct s { _Bool s: 1; _Bool t; } s; 62 struct s { _Bool s: 1; _Bool t; } s;
63 63
64 char a[true == 1 ? 1 : -1]; 64 char a[true == 1 ? 1 : -1];
65 char b[false == 0 ? 1 : -1]; 65 char b[false == 0 ? 1 : -1];
66 char c[__bool_true_false_are_defined == 1 ? 1 : -1]; 66 char c[__bool_true_false_are_defined == 1 ? 1 : -1];
67 char d[(bool) 0.5 == true ? 1 : -1]; 67 char d[(bool) 0.5 == true ? 1 : -1];
68 bool e = &s; 68 bool e = &s;
69 char f[(_Bool) 0.0 == false ? 1 : -1]; 69 char f[(_Bool) 0.0 == false ? 1 : -1];
70 char g[true]; 70 char g[true];
71 char h[sizeof (_Bool)]; 71 char h[sizeof (_Bool)];
72 char i[sizeof s.t]; 72 char i[sizeof s.t];
73 enum { j = false, k = true, l = false * true, m = true * 256 }; 73 enum { j = false, k = true, l = false * true, m = true * 256 };
74 _Bool n[m]; 74 _Bool n[m];
75 char o[sizeof n == m * sizeof n[0] ? 1 : -1]; 75 char o[sizeof n == m * sizeof n[0] ? 1 : -1];
76 char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; 76 char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
77 #if defined __xlc__ || defined __GNUC__ 77 #if defined __xlc__ || defined __GNUC__
78 /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 78 /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
79 reported by James Lemley on 2005-10-05; see 79 reported by James Lemley on 2005-10-05; see
80 http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html 80 http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
81 This test is not quite right, since xlc is allowed to 81 This test is not quite right, since xlc is allowed to
82 reject this program, as the initializer for xlcbug is 82 reject this program, as the initializer for xlcbug is
83 not one of the forms that C requires support for. 83 not one of the forms that C requires support for.
84 However, doing the test right would require a run-time 84 However, doing the test right would require a run-time
85 test, and that would make cross-compilation harder. 85 test, and that would make cross-compilation harder.
86 Let us hope that IBM fixes the xlc bug, and also adds 86 Let us hope that IBM fixes the xlc bug, and also adds
87 support for this kind of constant expression. In the 87 support for this kind of constant expression. In the
88 meantime, this test will reject xlc, which is OK, since 88 meantime, this test will reject xlc, which is OK, since
89 our stdbool.h substitute should suffice. We also test 89 our stdbool.h substitute should suffice. We also test
90 this with GCC, where it should work, to detect more 90 this with GCC, where it should work, to detect more
91 quickly whether someone messes up the test in the 91 quickly whether someone messes up the test in the
92 future. */ 92 future. */
93 char digs[] = "0123456789"; 93 char digs[] = "0123456789";
94 int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); 94 int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
95 #endif 95 #endif
96 /* Catch a bug in an HP-UX C compiler. See 96 /* Catch a bug in an HP-UX C compiler. See
97 http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html 97 http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
98 http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html 98 http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
99 */ 99 */
100 _Bool q = true; 100 _Bool q = true;
101 _Bool *pq = &q; 101 _Bool *pq = &q;
102 ], 102 ],
103 [ 103 [
104 *pq |= q; 104 *pq |= q;
105 *pq |= ! q; 105 *pq |= ! q;
106 /* Refer to every declared value, to avoid compiler optimizations. */ 106 /* Refer to every declared value, to avoid compiler optimizations. */
107 return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l 107 return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
108 + !m + !n + !o + !p + !q + !pq); 108 + !m + !n + !o + !p + !q + !pq);
109 ], 109 ],
110 [ac_cv_header_stdbool_h=yes], 110 [ac_cv_header_stdbool_h=yes],
111 [ac_cv_header_stdbool_h=no])]) 111 [ac_cv_header_stdbool_h=no])])
112 AC_CHECK_TYPES([_Bool]) 112 AC_CHECK_TYPES([_Bool])
113 if test $ac_cv_header_stdbool_h = yes; then 113 if test $ac_cv_header_stdbool_h = yes; then
114 AC_DEFINE([HAVE_STDBOOL_H], [1], [Define to 1 if stdbool.h conforms to C99.]) 114 AC_DEFINE([HAVE_STDBOOL_H], [1], [Define to 1 if stdbool.h conforms to C99.])