changeset 13240:2fe50700ce2c

test-stdbool: skip test that fails with Solaris CC Solaris 9 CC has a bug; it allows (int)0.0 and (bool)0 in constant expressions, but not (bool)0.0. Our replacement stdbool cannot provide that guarantee of C99 for this particular compiler, but since use of that feature causes compilation failure rather than silent mis-compilation, we just skip the test. * tests/test-stdbool.c (f): Skip test that causes compilation error under buggy C++ compiler. * lib/stdbool.in.h: Document the limitation. * doc/posix-headers/stdbool.texi (stdbool.h): Likewise. Signed-off-by: Eric Blake <eblake@redhat.com>
author Eric Blake <eblake@redhat.com>
date Fri, 16 Apr 2010 17:04:58 -0600
parents 81bcdef18cd8
children cf12b14b472b
files ChangeLog doc/posix-headers/stdbool.texi lib/stdbool.in.h tests/test-stdbool.c
diffstat 4 files changed, 15 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Apr 16 14:21:29 2010 -0600
+++ b/ChangeLog	Fri Apr 16 17:04:58 2010 -0600
@@ -1,5 +1,11 @@
 2010-04-16  Eric Blake  <eblake@redhat.com>
 
+	test-stdbool: skip test that fails with Solaris CC
+	* tests/test-stdbool.c (f): Skip test that causes compilation
+	error under buggy C++ compiler.
+	* lib/stdbool.in.h: Document the limitation.
+	* doc/posix-headers/stdbool.texi (stdbool.h): Likewise.
+
 	setenv: allow compilation with C++
 	* lib/setenv.c (__add_to_environ): Add a cast.  Also, drop use of
 	register keyword.
--- a/doc/posix-headers/stdbool.texi	Fri Apr 16 14:21:29 2010 -0600
+++ b/doc/posix-headers/stdbool.texi	Fri Apr 16 17:04:58 2010 -0600
@@ -27,4 +27,7 @@
 Casts and automatic conversions to @samp{bool} don't test against the
 zero value or the null pointer, as they should.  Such casts should only
 be used if the casted value is known to be equal to 0 or 1.
+@item
+You cannot assume that casting floating point to @samp{bool} will
+result in a constant expression.
 @end itemize
--- a/lib/stdbool.in.h	Fri Apr 16 14:21:29 2010 -0600
+++ b/lib/stdbool.in.h	Fri Apr 16 17:04:58 2010 -0600
@@ -50,6 +50,9 @@
          with this substitute.  With this substitute, only the values 0 and 1
          give the expected result when converted to _Bool' or 'bool'.
 
+       - C99 allows the use of (_Bool)0.0 in constant expressions, but
+         this substitute cannot always provide this property.
+
    Also, it is suggested that programs use 'bool' rather than '_Bool';
    this isn't required, but 'bool' is more common.  */
 
--- a/tests/test-stdbool.c	Fri Apr 16 14:21:29 2010 -0600
+++ b/tests/test-stdbool.c	Fri Apr 16 17:04:58 2010 -0600
@@ -46,11 +46,12 @@
 char a[true == 1 ? 1 : -1];
 char b[false == 0 ? 1 : -1];
 char c[__bool_true_false_are_defined == 1 ? 1 : -1];
-#if 0 /* Cannot be guaranteed with gnulib's <stdbool.h>.  */
+#if 0 /* Cannot be guaranteed with gnulib's <stdbool.h>, at least,
+not for all compilers.  */
 char d[(bool) 0.5 == true ? 1 : -1];
 bool e = &s;
+char f[(_Bool) 0.0 == false ? 1 : -1];
 #endif
-char f[(_Bool) 0.0 == false ? 1 : -1];
 char g[true];
 char h[sizeof (_Bool)];
 #if 0 /* See above.  */