id,summary,reporter,owner,description,type,status,milestone,component,version,severity,resolution,keywords,cc 5789,Segmentation fault with serialization when register_type rearranged,Krzysztof Tomaszewski ,Robert Ramey,"In our project we use boost-serialization to store objects by base-class pointer (boost::shared_ptr). We choose to register polymorphic classes by register_type method. So we have a template of a function which contains all class registrations like this: template void RegisterDerivedClasses(Archive& ar) { ar.register_type((A*)0); ar.register_type((B*)0); ar.register_type((C*)0); // ... } This function template is called on each archive object before we use it. With development of the project we add new class registrations in this function template. The problem is a segmentation fault occuring in following situation: 1) our program serializes some data with boost-serialization 2) we add new class registration, so function RegisterDerivedClasses changes to something like this: --- template void RegisterDerivedClasses(Archive& ar) { ar.register_type((NewClass*)0); ar.register_type((A*)0); ar.register_type((B*)0); ar.register_type((C*)0); // ... } --- 3) we recompile our project to produce the program 4) the program deserializes data produced in step 1 (no change in serialize methods) ================================================================================= BOST VERSION AND BUILD: This is occuring with Boost 1.47 and we checked this is occuring as well with 1.45. Our boost library is prepared with following steps: ./bootstrap.sh --with-libraries=date_time,filesystem,serialization,system,thread,signals --prefix=/usr/local/boost/1.47 ./b2 --layout=system variant=release link=static threading=multi ================================================================================= OS PLATFORM: Ubuntu 10.10, ""uname -a"" gives: Linux raU 2.6.38-10-generic-pae #44~lucid1-Ubuntu SMP Mon Jun 6 22:01:00 UTC 2011 i686 GNU/Linux ================================================================================= GCC: ""g++ -v"" gives: Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.5.1/lto-wrapper Target: i686-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.5.1-7ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-4.5/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.5 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.5 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-gold --with-plugin-ld=ld.gold --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu Thread model: posix gcc version 4.5.1 (Ubuntu/Linaro 4.5.1-7ubuntu2) ================================================================================= Compilation of the sample program: g++ test20.cpp -I /usr/local/boost/1.47/include/ -L /usr/local/boost/1.47/lib/ -lboost_serialization Running sample program: ./a.out",Bugs,closed,To Be Determined,serialization,Boost 1.47.0,Problem,invalid,,