ladybird/Libraries/LibTest/AssertionHandler.cpp
Undefine 5b5a881992 LibTest: Fix custom assertion handler on FreeBSD and OpenBSD
Those systems expect sigjmp_buf to be passed to sigsetjmp / siglongjmp
instead of jmp_buf.
2026-01-12 20:58:21 +01:00

48 lines
1.2 KiB
C++

/*
* Copyright (c) 2025, ayeteadoe <ayeteadoe@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibTest/Macros.h>
namespace Test {
static libtest_jmp_buf g_assert_jmp_buf = {};
static bool g_assert_jmp_buf_valid = false;
libtest_jmp_buf& assertion_jump_buffer() { return g_assert_jmp_buf; }
void set_assertion_jump_validity(bool validity)
{
g_assert_jmp_buf_valid = validity;
}
static bool is_assertion_jump_valid()
{
return g_assert_jmp_buf_valid;
}
static void assertion_handler_impl(char const*)
{
if (is_assertion_jump_valid()) {
set_assertion_jump_validity(false);
LIBTEST_LONGJMP(assertion_jump_buffer(), 1); /* NOLINT(cert-err52-cpp, bugprone-setjmp-longjmp) Isolated to test infrastructure and allows us to not depend on spawning child processes for death tests */
}
// Fall through to default assertion handler
}
}
#if defined(AK_OS_WINDOWS)
# define EXPORT __declspec(dllexport)
#else
# define EXPORT __attribute__((visibility("default")))
#endif
extern "C" EXPORT void ak_assertion_handler(char const* message);
void ak_assertion_handler(char const* message)
{
::Test::assertion_handler_impl(message);
}