http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55041
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-10-28
13:27:20 UTC ---
The shared_ptr tests fail because GDB is getting the variable's type wrong,
seeing it as the base class not the correct type:
(gdb) p sp1
$1 = {<std::__shared_ptr<int, (__gnu_cxx::_Lock_policy)2>> = {_M_ptr =
0x12345678, _M_refcount = {_M_pi = 0x604010}}, <No data fields>}
(gdb) p wp1
$2 = {<std::__weak_ptr<int, (__gnu_cxx::_Lock_policy)2>> = {_M_ptr =
0x12344321, _M_refcount = {_M_pi = 0x604040}}, <No data fields>}
(gdb) p wp2
$3 = {<std::__weak_ptr<int, (__gnu_cxx::_Lock_policy)2>> = {_M_ptr =
0x56788765, _M_refcount = {_M_pi = 0x604070}}, <No data fields>}
(gdb) p/r wp2
$4 = {<std::__weak_ptr<int, (__gnu_cxx::_Lock_policy)2>> = {_M_ptr =
0x56788765, _M_refcount = {_M_pi = 0x604070}}, <No data fields>}
(gdb) p/r sp1
$5 = {<std::__shared_ptr<int, (__gnu_cxx::_Lock_policy)2>> = {_M_ptr =
0x12345678, _M_refcount = {_M_pi = 0x604010}}, <No data fields>}
This doesn't look like a libstdc++ problem.