2

私は使っている:

SLES 11 x86_64

以下でコンパイルされたBoost 1.51.0 : ./b2 toolset=clang cxxflags="-stdlib=libc++ -std=c++11" linkflags="-stdlib=libc++"

svn からのclang (約 2 週間古い)

svn のlibc++ (ほぼ最新)

テストは最後に中止 (SIGABORT) されます:

./unitTest
Running 3 test cases...
ModelTest.cpp(28): error in "GameField_added_correctly": check objects.size() == std::size_t{1} failed [0 != 1]
ModelTest.cpp(37): error in "Spaceship_added_correctly": check objects.size() == std::size_t{1} failed [0 != 1]
ModelTest.cpp(52): error in "Spaceship_out_of_GameField_is_demolished_after_tick": check objects.size() == std::size_t{2} failed [0 != 2]
ModelTest.cpp(59): error in "Spaceship_out_of_GameField_is_demolished_after_tick": check objects.size() == std::size_t{1} failed [0 != 1]

Aborted

これは非常に興味深いバックトレースです:

Program received signal SIGABRT, Aborted.
0x00007ffff7183945 in *__GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64      ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
        in ../nptl/sysdeps/unix/sysv/linux/raise.c
(gdb) bt
#0  0x00007ffff7183945 in *__GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0x00007ffff7184f21 in *__GI_abort () at abort.c:92
#2  0x00007ffff796020f in std::uncaught_exception () at ../src/exception.cpp:110
#3  0x00007ffff7968784 in std::__1::basic_ostream<char>::sentry::~sentry (this=0x7fffffffcd18) at ../include/ostream:243
#4  0x000000000042a348 in std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<< <std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char) ()
#5  0x000000000042b85f in boost::unit_test::results_reporter::make_report(boost::unit_test::report_level, unsigned long) ()
#6  0x0000000000431e22 in boost::unit_test::unit_test_main(boost::unit_test::test_suite* (*)(int, char**), int, char**) ()
#7  0x00007ffff716fbc6 in __libc_start_main (main=0x432110 <main>, argc=1, ubp_av=0x7fffffffced8, init=0x45d380 <__libc_csu_init>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffcec8) at libc-start.c:226
#8  0x0000000000405ec9 in _start () at ../sysdeps/x86_64/elf/start.S:113
(gdb)

テスト結果を印刷しようとすると失敗します。すべてのテスト ケースに合格した場合も同様です。std::ostream の破棄中にどういうわけか例外があることがわかります。std::uncaught_exception が libc++ インライン名前空間 (__1) からのものではないのは奇妙です。

以前に同様の問題に遭遇した人はいますか?何が間違っている可能性がありますか?

更新: libcxx のバグの可能性: http://llvm.org/bugs/show_bug.cgi?id=13669

4

0 に答える 0