diff --git a/Meta/Lagom/CMakeLists.txt b/Meta/Lagom/CMakeLists.txt index 36e8781fd4..d555a7e391 100644 --- a/Meta/Lagom/CMakeLists.txt +++ b/Meta/Lagom/CMakeLists.txt @@ -497,6 +497,22 @@ if (BUILD_LAGOM) add_executable(test262-runner ../../Tests/LibJS/test262-runner.cpp) target_link_libraries(test262-runner LibJS LibCore) + if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + include(CheckCSourceCompiles) + # Check for musl's declaration of __assert_fail + check_c_source_compiles( + " + #include + __attribute__((__noreturn__)) void __assert_fail(char const* assertion, char const* file, int line, char const* function) {} + int main() {} + " + ASSERT_FAIL_HAS_INT + ) + endif() + if (ASSERT_FAIL_HAS_INT OR EMSCRIPTEN) + target_compile_definitions(test262-runner PRIVATE ASSERT_FAIL_HAS_INT) + endif() + add_executable(wasm ../../Userland/Utilities/wasm.cpp) target_link_libraries(wasm LibCore LibWasm LibLine LibMain) diff --git a/Tests/LibJS/test262-runner.cpp b/Tests/LibJS/test262-runner.cpp index 84bc611ced..81d3a87c15 100644 --- a/Tests/LibJS/test262-runner.cpp +++ b/Tests/LibJS/test262-runner.cpp @@ -556,13 +556,16 @@ static bool g_in_assert = false; exit(12); } +// FIXME: Use a SIGABRT handler here instead of overriding internal libc assertion handlers. +// Fixing this will likely require updating the test driver as well to pull the assertion failure +// message out of stderr rather than from the json object printed to stdout. #ifdef AK_OS_SERENITY void __assertion_failed(char const* assertion) { handle_failed_assert(assertion); } #else -# ifdef AK_OS_EMSCRIPTEN +# ifdef ASSERT_FAIL_HAS_INT /* Set by CMake */ extern "C" __attribute__((__noreturn__)) void __assert_fail(char const* assertion, char const* file, int line, char const* function) # else extern "C" __attribute__((__noreturn__)) void __assert_fail(char const* assertion, char const* file, unsigned int line, char const* function)