Hey boost users,
I've hit what I figure is a compiler bug with release 1.33.1 under gcc
3.2, I'm trying to come up with a workaround.
I modified test_exported.cpp from the serialization test suite to
serialize via shared_ptr to base rather than
polymorphic_base*, and I've verified that the test runs fine on
several platforms with gcc 4.0 and 3.4, but fails with 3.2. I'd love
to just abandon 3.2, but unfortunately the hosts that require it are
(literally) at the South Pole.
The error reported is:
execute-test ../../../bin/boost/libs/serialization/test/test_exported_binary_archive.test/gcc/debug/test_exported_binary_archive.run
====== BEGIN OUTPUT ======
test_exported_binary_archive: /icework/troy/boost_1_33_1/libs/serialization/src/basic_iarchive.cpp:466: const boost::archive::detail::basic_pointer_iserializer* boost::archive::detail::basic_iarchive_impl::load_pointer(boost::archive::detail::basic_iarchive&, void*&, const boost::archive::detail::basic_pointer_iserializer*, const boost::archive::detail::basic_pointer_iserializer*(*)(const boost::serialization::extended_type_info&)): Assertion `new_cid == cid' failed.
Running 1 test case...
unknown location(0): fatal error in "test_main_caller( argc, argv )": signal: SIGABRT (application abort requested)
*** errors detected in test suite "Test Program"; see standard output for details
EXIT STATUS: 200
====== END OUTPUT ======
Which indicates that something has gone wrong with registration, it
seems. One can toggle the buggy behavior by removing
BOOST_IS_ABSTRACT(polymorphic_base). Whether polymorphic_base
actually has a pure virtual function doesn't influence whether the
error appears or not.
I'm going to keep digging, but I thought I'd ask if this rings a bell
with anyone. Modified test_exported.cpp attached. Thanks in advance,
-t