# 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 --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -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 --git a/doc/posix-headers/stdbool.texi b/doc/posix-headers/stdbool.texi --- a/doc/posix-headers/stdbool.texi +++ b/doc/posix-headers/stdbool.texi @@ -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 --git a/lib/stdbool.in.h b/lib/stdbool.in.h --- a/lib/stdbool.in.h +++ b/lib/stdbool.in.h @@ -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 --git a/tests/test-stdbool.c b/tests/test-stdbool.c --- a/tests/test-stdbool.c +++ b/tests/test-stdbool.c @@ -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. */