From: Eric Blake Date: Fri, 16 Apr 2010 23:04:58 +0000 (-0600) Subject: test-stdbool: skip test that fails with Solaris CC X-Git-Tag: v0.1~4247 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=fef5e6b4fc847bb1c01a20314effae7cb7828f38;p=gnulib.git 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 index 2360f0eea..4d56e5a3e 100644 --- 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 index 94dca84c3..990c17be7 100644 --- a/doc/posix-headers/stdbool.texi +++ b/doc/posix-headers/stdbool.texi @@ -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 diff --git a/lib/stdbool.in.h b/lib/stdbool.in.h index 881faf3cf..d589cb45f 100644 --- 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 index 560e0e534..fcb534de4 100644 --- a/tests/test-stdbool.c +++ b/tests/test-stdbool.c @@ -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 . */ +#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; -#endif char f[(_Bool) 0.0 == false ? 1 : -1]; +#endif char g[true]; char h[sizeof (_Bool)]; #if 0 /* See above. */