# HG changeset patch # User Eric Blake # Date 1271459098 21600 # Node ID 2fe50700ce2c1f5afb763845261b12957dda13a5 # Parent 81bcdef18cd898f7095c2a812a7acd24789f1663 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 diff -r 81bcdef18cd8 -r 2fe50700ce2c ChangeLog --- 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 + 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. diff -r 81bcdef18cd8 -r 2fe50700ce2c doc/posix-headers/stdbool.texi --- 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 diff -r 81bcdef18cd8 -r 2fe50700ce2c lib/stdbool.in.h --- 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. */ diff -r 81bcdef18cd8 -r 2fe50700ce2c tests/test-stdbool.c --- 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 . */ +#if 0 /* Cannot be guaranteed with gnulib's , 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. */