FreeBSD の arm64 の BOOST_CHECK_THROW の動作がおかしい2024年03月15日 13時16分35秒

boost test を使っている。同じコードが時々エラーを出している事があって不思議に思っていた。最初は、amd64 と arm64 の両方で共有していたので、依存関係がおかしくなって、コンパイルを失敗していたのかと思っていたが違かった。手元では FreeBSD 14.0-RELEASE を使っているが、14.0 が原因かどうかは定かではない。

問題があるのは、一部の BOOST_CHECK_THROW。残念だが、完全な再現条件は特定していない。ただ、例外の撒き戻し処理に一部想定外の事が起こっているようで、std::terminate が呼ばれてしまっている。

取り合えず、BOOST_CHECK_THROW の例。

#define BOOST_TEST_MODULE Verify Std C++
#include <boost/test/unit_test.hpp>
#include <boost/test/included/unit_test.hpp>

BOOST_AUTO_TEST_CASE( test_throw )
{
    BOOST_CHECK_THROW(throw 1, int);
}
このコードは arm64 でも問題なく処理できている。
%  c++ -I /usr/local/include/ -L /usr/local/lib -l boost_unit_test_framework boost_unit_test_exception.cpp 
% ./a.out 
Running 1 test case...

*** No errors detected