#include "ggml-impl.h" #include #include static std::terminate_handler previous_terminate_handler; GGML_NORETURN static void ggml_uncaught_exception() { ggml_print_backtrace(); if (previous_terminate_handler) { previous_terminate_handler(); } abort(); // unreachable unless previous_terminate_handler was nullptr } static bool ggml_uncaught_exception_init = []{ const char * GGML_NO_BACKTRACE = getenv("GGML_NO_BACKTRACE"); if (GGML_NO_BACKTRACE) { return false; } const auto prev{std::get_terminate()}; GGML_ASSERT(prev != ggml_uncaught_exception); previous_terminate_handler = prev; std::set_terminate(ggml_uncaught_exception); return true; }();