1/* Test of <stdbool.h> substitute. 2 Copyright (C) 2002-2007 Free Software Foundation, Inc. 3 4 This program is free software: you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; either version 3 of the License, or 7 (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 16 17/* Written by Bruno Haible <bruno@clisp.org>, 2007. */ 18 19#include <config.h> 20 21#include <stdbool.h> 22 23#ifndef bool 24 "error: bool is not defined" 25#endif 26#ifndef false 27 "error: false is not defined" 28#endif 29#if false 30 "error: false is not 0" 31#endif 32#ifndef true 33 "error: true is not defined" 34#endif 35#if true != 1 36 "error: true is not 1" 37#endif 38#ifndef __bool_true_false_are_defined 39 "error: __bool_true_false_are_defined is not defined" 40#endif 41 42#if 0 /* Cannot be guaranteed with gnulib's <stdbool.h>. */ 43struct s { _Bool s: 1; _Bool t; } s; 44#endif 45 46char a[true == 1 ? 1 : -1]; 47char b[false == 0 ? 1 : -1]; 48char c[__bool_true_false_are_defined == 1 ? 1 : -1]; 49#if 0 /* Cannot be guaranteed with gnulib's <stdbool.h>. */ 50char d[(bool) 0.5 == true ? 1 : -1]; 51bool e = &s; 52#endif 53char f[(_Bool) 0.0 == false ? 1 : -1]; 54char g[true]; 55char h[sizeof (_Bool)]; 56#if 0 /* See above. */ 57char i[sizeof s.t]; 58#endif 59enum { j = false, k = true, l = false * true, m = true * 256 }; 60_Bool n[m]; 61char o[sizeof n == m * sizeof n[0] ? 1 : -1]; 62char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; 63#if 0 /* Cannot be guaranteed with gnulib's <stdbool.h>. */ 64#if defined __xlc__ || defined __GNUC__ 65 /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 66 reported by James Lemley on 2005-10-05; see 67 http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html 68 This test is not quite right, since xlc is allowed to 69 reject this program, as the initializer for xlcbug is 70 not one of the forms that C requires support for. 71 However, doing the test right would require a run-time 72 test, and that would make cross-compilation harder. 73 Let us hope that IBM fixes the xlc bug, and also adds 74 support for this kind of constant expression. In the 75 meantime, this test will reject xlc, which is OK, since 76 our stdbool.h substitute should suffice. We also test 77 this with GCC, where it should work, to detect more 78 quickly whether someone messes up the test in the 79 future. */ 80 char digs[] = "0123456789"; 81 int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); 82#endif 83#endif 84/* Catch a bug in an HP-UX C compiler. See 85 http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html 86 http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html 87 */ 88_Bool q = true; 89_Bool *pq = &q; 90 91int 92main () 93{ 94 return 0; 95} 96