[RC_1_34_0] failures + analysis

I've been running release-mode tests of the release branch using the native AMD64 version of VC++ 8.0, and things have settled down now to the point where I think the failure report is useful. You can see the results in the BoostConsulting column of the release branch regression report (http://tinyurl.com/lawq3), but I've enclosed a list of the failures along with my analysis. I pruned the error messages down to a representative sample for each failure so this should be easy to review. The libraries with failures are: bind concept_check date_time graph iterator numeric program_options python range spirit test thread tr1 typeof Although this platform/compiler is not part of our official release requirements, I hope that the consolidation, pruning, and analysis will make it easier to use than the webpage, to the point that the library maintainers will prefer using what I've enclosed, or at least will be willing to give it a few moments' attention. Thanks, Dave ------- compile-c-c++ concept_check/stl_concept_covering.obj known bogus test. compile-c-c++ graph/csr_graph_test.obj call "C:\Program Files (x86)\Microsoft Visual Studio 8\VC\vcvarsall.bat" amd64 >nul cl /Zm800 -nologo @"Z:\results\boost\bin.v2\libs\graph\test\csr_graph_test.test\msvc-8.0.m\rls\adrs-mdl-64\instr-set-optrn\thrd-mlt\csr_graph_test.obj.rsp" csr_graph_test.cpp ..\libs\graph\test\csr_graph_test.cpp(353) : error C2752: 'boost::property_map<Graph,Property>' : more than one partial specialization matches the template argument list with [ Graph=boost::compressed_sparse_row_graph<boost::directedS,Vertex,Edge>, Property=double Vertex::* ] ..\boost/graph/compressed_sparse_row_graph.hpp(737): could be 'boost::property_map<boost::compressed_sparse_row_graph<Directed,VertexProperty,EdgeProperty,GraphProperty,Vertex,EdgeIndex>,TBundle::* >' ..\boost/graph/properties.hpp(352): or 'boost::property_map<Graph,TBundle::* >' ..\boost/pending/property.hpp(46) : error C2825: 'PropertyTag': must be a class or namespace when followed by '::' ..\boost/graph/properties.hpp(199) : see reference to class template instantiation 'boost::property_kind<PropertyTag>' being compiled with [ PropertyTag=double Vertex::* ] ..\libs\graph\test\csr_graph_test.cpp(353) : see reference to class template instantiation 'boost::property_map<Graph,Property>' being compiled with [ Graph=boost::compressed_sparse_row_graph<boost::directedS,Vertex,Edge>, Property=double Vertex::* ] compile-c-c++ iterator/lvalue_concept_fail.obj The optimizer seems to be defeating the concept check. Newer concept checks in HEAD don't have this problem. compile-c-c++ numeric/det.obj compile-c-c++ numeric/integer.obj compile-c-c++ numeric/mul.obj compile-c-c++ numeric/overflow.obj compile-c-c++ numeric/pi.obj compile-c-c++ numeric/pow.obj compile-c-c++ numeric/test_float.obj All of the above: ..\boost/numeric/interval/hw_rounding.hpp(38) : fatal error C1189: #error : Boost.Numeric.Interval: Please specify rounding control mechanism. compile-c-c++ program_options/test_convert.obj Appears to be a missing #include file, but it also looks like this should be using boost/detail/lightweight_test.hpp ..\libs\program_options\test\test_convert.cpp(22) : error C3861: 'assert': identifier not found ..\libs\program_options\test\test_convert.cpp(77) : error C2143: syntax error : missing ';' before '<' compile-c-c++ tr1/std_test_bind_tricky.obj Looks like a Boost bug. Missing #include? ..\libs\tr1\test\test_bind_tricky.cpp(21) : error C2039: 'is_placeholder' : is not a member of 'std::tr1' ..\libs\tr1\test\test_bind_tricky.cpp(54) : see reference to function template instantiation 'void check_placeholder<boost::arg<I>>(const T &)' being compiled with [ I=1, T=boost::arg<1> ] compile-c-c++ tr1/std_test_function_tricky.obj It's unknown what the problem is here; I suggest using boost/mpl/assert.hpp for a more descriptive message. ..\libs\tr1\test\test_function_tricky.cpp(77) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>' with [ x=false ] ..\libs\tr1\test\test_function_tricky.cpp(78) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>' with [ x=false ] compile-c-c++ tr1/std_test_mem_fn_tricky.obj This one looks like a Boost bug. ..\libs\tr1\test\test_mem_fn_tricky.cpp(37) : error C2664: 'boost::_mfi::dm<R,T> boost::mem_fn<expected_result(void),test>(R (__cdecl test::* ))' : cannot convert parameter 1 from 'expected_result (__cdecl test::* )(void) volatile' to 'expected_result (__cdecl test::* )(void)' with [ R=expected_result (void), T=test ] Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast ... compile-c-c++ tr1/std_test_ref_wrapper_tricky.obj It's unknown what the problem is here; I suggest using boost/mpl/assert.hpp for a more descriptive message. ..\libs\tr1\test\test_ref_wrapper_tricky.cpp(38) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>' with [ x=false ] ..\libs\tr1\test\test_ref_wrapper_tricky.cpp(39) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>' with [ x=false ] compile-c-c++ tr1/test_bind_tricky.obj Looks like a Boost bug. Missing #include? ..\libs\tr1\test\test_bind_tricky.cpp(21) : error C2039: 'is_placeholder' : is not a member of 'std::tr1' ..\libs\tr1\test\test_bind_tricky.cpp(54) : see reference to function template instantiation 'void check_placeholder<boost::arg<I>>(const T &)' being compiled with [ I=1, T=boost::arg<1> ] compile-c-c++ tr1/test_function_tricky.obj It's unknown what the problem is here; I suggest using boost/mpl/assert.hpp for a more descriptive message. ..\libs\tr1\test\test_function_tricky.cpp(77) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>' with [ x=false ] ..\libs\tr1\test\test_function_tricky.cpp(78) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>' with [ x=false ] compile-c-c++ tr1/test_mem_fn_tricky.obj This one looks like a Boost bug. ..\libs\tr1\test\test_mem_fn_tricky.cpp(37) : error C2664: 'boost::_mfi::dm<R,T> boost::mem_fn<expected_result(void),test>(R (__cdecl test::* ))' : cannot convert parameter 1 from 'expected_result (__cdecl test::* )(void) volatile' to 'expected_result (__cdecl test::* )(void)' with [ R=expected_result (void), T=test ] Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast ... compile-c-c++ tr1/test_ref_wrapper_tricky.obj It's unknown what the problem is here; I suggest using boost/mpl/assert.hpp for a more descriptive message. ..\libs\tr1\test\test_ref_wrapper_tricky.cpp(38) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>' with [ x=false ] compile-c-c++ typeof/data_member_native.obj compile-c-c++ typeof/function_binding_native.obj compile-c-c++ typeof/function_native.obj compile-c-c++ typeof/function_ptr_from_tpl_native.obj compile-c-c++ typeof/function_ptr_native.obj compile-c-c++ typeof/function_ref_native.obj compile-c-c++ typeof/member_function_native.obj compile-c-c++ typeof/modifiers_native.obj compile-c-c++ typeof/nested_typedef_native.obj compile-c-c++ typeof/noncopyable_native.obj compile-c-c++ typeof/odr1.obj compile-c-c++ typeof/odr2.obj compile-c-c++ typeof/std_native.obj compile-c-c++ typeof/template_dependent_native.obj compile-c-c++ typeof/template_enum_native.obj compile-c-c++ typeof/template_int_native.obj compile-c-c++ typeof/template_multiword_native.obj compile-c-c++ typeof/template_tpl_native.obj compile-c-c++ typeof/template_type_native.obj compile-c-c++ typeof/type_native.obj I think these are all expected failures, and we fix them in 1.35 (CVS HEAD) with a newly-discovered VC8 bugfeature. ..\boost/typeof/typeof.hpp(104) : fatal error C1189: #error : native typeof is not supported testing.capture-output bind/mem_fn_eq_test.run looks like a Boost bug. ..\libs\bind\test\mem_fn_eq_test.cpp(175): test 'boost::mem_fn(&X::mf0_1) != boost::mem_fn(&X::mf0_2)' failed in function 'int __cdecl main(void)' ..\libs\bind\test\mem_fn_eq_test.cpp(178): test 'boost::mem_fn(&X::cmf0_1) != boost::mem_fn(&X::cmf0_2)' failed in function 'int __cdecl main(void)' ... 36 errors detected. testing.capture-output date_time/testmicrosec_time_clock.run looks like a Boost bug. 2007-Feb-25 10:27:54 2007-Feb-25 10:27:54.730125000 Pass :: hours match Pass :: minutes match Pass :: seconds match Pass :: hours date Pass :: last is less 2007-Feb-25 10:27:54 2007-Feb-25 10:27:54.730125000 Pass :: hours match Pass :: minutes match Pass :: seconds match Pass :: hours date FAIL :: last is less ... testing.capture-output python/exec.run This failure is a combination of broken Windows Python support in BBv2 (working on it) and local configuration issues on the test machine. EXIT STATUS: 128 testing.capture-output spirit/symbols_add_null.run testing.capture-output spirit/symbols_add_null_debug.run ..\libs\spirit\test\symbols_add_null.cpp(52): test '0' failed in function 'int __cdecl main(void)' ..\libs\spirit\test\symbols_add_null.cpp(62): test '0' failed in function 'int __cdecl main(void)' testing.capture-output test/prg_exec_fail3.run This one is very suspicious, because there's no ====== BEGIN OUTPUT ====== ... EXIT STATUS: 1 ====== END OUTPUT ====== sequence in the log, and yet bjam marks it as failing. testing.capture-output thread/test_tss_lib.run Not sure what this one means. ====== BEGIN OUTPUT ====== Running 1 test case... tss_instances = 0; tss_total = 5 tss_instances = 5; tss_total = 5 ../libs/thread/test/test_tss.cpp(151): error in "test_tss": Support of automatic tss cleanup for native threading API not available *** 1 failure detected in test suite "Master Test Suite" EXIT STATUS: 201 ====== END OUTPUT ====== -- Dave Abrahams Boost Consulting www.boost-consulting.com

David Abrahams wrote:
testing.capture-output date_time/testmicrosec_time_clock.run
looks like a Boost bug.
2007-Feb-25 10:27:54 2007-Feb-25 10:27:54.730125000 Pass :: hours match Pass :: minutes match Pass :: seconds match Pass :: hours date Pass :: last is less 2007-Feb-25 10:27:54 2007-Feb-25 10:27:54.730125000 Pass :: hours match Pass :: minutes match Pass :: seconds match Pass :: hours date FAIL :: last is less ...
It's not a bug in the library -- your machine is too fast. The test is, as much as anything, a test that the clock on the machine provides monotonically increasing values. So there's 3 possible solutions. 1) Change the test to use >= in the time comparisons, 2) increase the number of loops between measurements, or 3) ignore it. Jeff

Jeff Garland <jeff@crystalclearsoftware.com> writes:
David Abrahams wrote:
testing.capture-output date_time/testmicrosec_time_clock.run
looks like a Boost bug.
2007-Feb-25 10:27:54 2007-Feb-25 10:27:54.730125000 Pass :: hours match Pass :: minutes match Pass :: seconds match Pass :: hours date Pass :: last is less 2007-Feb-25 10:27:54 2007-Feb-25 10:27:54.730125000 Pass :: hours match Pass :: minutes match Pass :: seconds match Pass :: hours date FAIL :: last is less ...
It's not a bug in the library -- your machine is too fast. The test is, as much as anything, a test that the clock on the machine provides monotonically increasing values. So there's 3 possible solutions. 1) Change the test to use >= in the time comparisons,
So you're telling me there's a bug in the test. That's still "a Boost bug."
2) increase the number of loops between measurements, or 3) ignore it.
4) Keep looping and measuring until the value changes or a timeout expires? -- Dave Abrahams Boost Consulting www.boost-consulting.com

David Abrahams wrote:
Jeff Garland <jeff@crystalclearsoftware.com> writes:
testing.capture-output date_time/testmicrosec_time_clock.run
looks like a Boost bug.
2007-Feb-25 10:27:54 2007-Feb-25 10:27:54.730125000 Pass :: hours match Pass :: minutes match Pass :: seconds match Pass :: hours date Pass :: last is less 2007-Feb-25 10:27:54 2007-Feb-25 10:27:54.730125000 Pass :: hours match Pass :: minutes match Pass :: seconds match Pass :: hours date FAIL :: last is less ... It's not a bug in the library -- your machine is too fast. The test is, as much as anything, a test that the clock on the machine
David Abrahams wrote: provides monotonically increasing values. So there's 3 possible solutions. 1) Change the test to use >= in the time comparisons,
So you're telling me there's a bug in the test. That's still "a Boost bug."
It's a feature, not a bug ;-) I wrote the test this way intentionally so that I could see what happens on various platforms. For example, if the clock, *never* increments that's just as much a problem as the clock returning a less value when it should always increase. But at this point with boost running on tons of platforms and the clock code working on all of them it's just causing problems and not telling us anything useful.
2) increase the number of loops between measurements, or 3) ignore it.
4) Keep looping and measuring until the value changes or a timeout expires?
Nah...I'll just make it >=. Jeff

Jeff Garland wrote: > David Abrahams wrote: >> Jeff Garland <jeff@crystalclearsoftware.com> writes: >> >>> 2) increase the number of loops between >>> measurements, or 3) ignore it. >> 4) Keep looping and measuring until the value changes or a timeout >> expires? > > Nah...I'll just make it >=. Fix committed to HEAD and RC. Jeff

David Abrahams wrote:
testing.capture-output bind/mem_fn_eq_test.run
looks like a Boost bug.
..\libs\bind\test\mem_fn_eq_test.cpp(175): test 'boost::mem_fn(&X::mf0_1) != boost::mem_fn(&X::mf0_2)' failed in function 'int __cdecl main(void)'
..\libs\bind\test\mem_fn_eq_test.cpp(178): test 'boost::mem_fn(&X::cmf0_1) != boost::mem_fn(&X::cmf0_2)' failed in function 'int __cdecl main(void)' ... 36 errors detected.
This is caused by the linker folding X::mf0_1 and X::mf0_2 into the same function. It is neither a Boost bug nor a compiler bug, just not particularly standard behavior.

"Peter Dimov" <pdimov@mmltd.net> writes:
David Abrahams wrote:
testing.capture-output bind/mem_fn_eq_test.run
looks like a Boost bug.
..\libs\bind\test\mem_fn_eq_test.cpp(175): test 'boost::mem_fn(&X::mf0_1) != boost::mem_fn(&X::mf0_2)' failed in function 'int __cdecl main(void)'
..\libs\bind\test\mem_fn_eq_test.cpp(178): test 'boost::mem_fn(&X::cmf0_1) != boost::mem_fn(&X::cmf0_2)' failed in function 'int __cdecl main(void)' ... 36 errors detected.
This is caused by the linker folding X::mf0_1 and X::mf0_2 into the same function. It is neither a Boost bug nor a compiler bug, just not particularly standard behavior.
Oh, well, it's a bug of the C++ implementation - we might as well say it's a bug in the compiler even though it technically happens at link time. Pointers to distinct functions are not allowed to compare equal, even if most of their code gets folded. -- Dave Abrahams Boost Consulting www.boost-consulting.com

David Abrahams wrote:
testing.capture-output thread/test_tss_lib.run
Not sure what this one means.
====== BEGIN OUTPUT ====== Running 1 test case... tss_instances = 0; tss_total = 5 tss_instances = 5; tss_total = 5 ../libs/thread/test/test_tss.cpp(151): error in "test_tss": Support of automatic tss cleanup for native threading API not available
*** 1 failure detected in test suite "Master Test Suite"
EXIT STATUS: 201 ====== END OUTPUT ======
When statically linking the thread lib, the implementation is making use of some lesser known PE (portable executable) file features to get automatic cleanup of TSS (thread specific storage) variables. This message means, that the cleanup works well when threads are launched via the boost API, but fails for threads that are launched over the native (i.e. W32) API. It will need some research whether (and how) this behavior can be implemented for this compiler. Roland
participants (4)
-
David Abrahams
-
Jeff Garland
-
Peter Dimov
-
Roland Schwarz