
Peter Dimov Wrote:
Ananda Tallur wrote:
Hello,
Originally, I had discovered a problem when using boost::unit_test_framework, for which I have already posted. But, by further analysing the problem, I could come out to a simple program, using only boost shared pointers, and which fails : -> on Mac OS X 10.4 -> when compiled with gcc 4.0.1 (coming with XCode 2.2.1), or gcc 4.1 (delivered by darwin ports) -> with optimisations : at least -O, or -O1, or -O2,etc... It works correctly with -O0 -> using either boost 1.33.1, 1.33.0, or 1.32.0
Below is the sample test program :
--- macosx_gcc4problem.cpp ---
[...]
This issue has already been reported, along with a fix, by Howard Hinnant:
http://lists.boost.org/Archives/boost/2006/03/102088.php http://lists.boost.org/Archives/boost/2006/03/102122.php http://lists.boost.org/Archives/boost/2006/03/102134.php
and the upcoming 1.34 release will no longer suffer from it.
Thank you very much for taking the time to simplify the failing example. I've reformatted it a bit as a test case. If you verify that it still fails for you, I'll include it in the regression tests.
#include <boost/shared_ptr.hpp> #include <boost/detail/lightweight_test.hpp>
struct A { int value; };
struct B { B( boost::shared_ptr<A> val ): a( val ) {}
boost::shared_ptr<A> a; };
struct C { C( B val ): b( val ) {}
B b; };
struct D { D( C val ): c( val ) {}
C c; };
D create() { boost::shared_ptr <A> a( new A );
a->value = 12345;
return D( C( B( a ) ) ); }
int main() { D d = create();
BOOST_TEST( d.c.b.a->value == 12345 );
return boost::report_errors(); }
Hello Peter, Thank you very much, this is very good news to know that the problem has already been fixed ! I have checked the reformatted test program just above, and confirm that : - It does not work for me (gcc 4.0.1 on Mac OS X, ppc G5), when compiled with optimization. - Once patched the file sp_counted_base_gcc_ppc.hpp including modifications from cvs, the problem disappears, and the test passes with success, with or without optimization. So the test program does its job, Thank you again Anand