test-stdbool: skip test that fails with Solaris CC
authorEric Blake <eblake@redhat.com>
Fri, 16 Apr 2010 23:04:58 +0000 (17:04 -0600)
committerEric Blake <eblake@redhat.com>
Fri, 16 Apr 2010 23:11:27 +0000 (17:11 -0600)
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>
ChangeLog
doc/posix-headers/stdbool.texi
lib/stdbool.in.h
tests/test-stdbool.c

index 2360f0eea428e2cbb5d98868752cf8eb5f468817..4d56e5a3e3fc3133711a131664666a79b332dd0f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
index 94dca84c34fed701f3d06c7331e4ce1b124422f1..990c17be7beae508dd7c44d6d476373df19d9a94 100644 (file)
@@ -27,4 +27,7 @@ should use @samp{unsigned int foo : 1;} rather than @samp{bool foo : 1;}.
 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
index 881faf3cf93ecfd568c170fb0a0e90603705ee9e..d589cb45f8128ba6dba87947a0edb24147883f99 100644 (file)
@@ -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.  */
 
index 560e0e534d3653dcec4ecaaebbf5ad5921afd3ae..fcb534de4c9a591ffa152c699c9e929f0b057756 100644 (file)
@@ -46,11 +46,12 @@ struct s { _Bool s: 1; _Bool t; } s;
 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;
-#endif
 char f[(_Bool) 0.0 == false ? 1 : -1];
+#endif
 char g[true];
 char h[sizeof (_Bool)];
 #if 0 /* See above.  */