#include "exception_utils.h" #include #include #include #include namespace NYql::NInternal { namespace { using TSafeMessage = std::variant; const char* GetCurrentMessageSafe(const TSafeMessage& message Y_LIFETIME_BOUND) noexcept { if (auto* str = std::get_if(&message)) { return str->c_str(); } if (auto* ptr = std::get_if(&message)) { return *ptr; } return "Message is corrupted"; } TSafeMessage SafeCurrentExceptionMessage() noexcept { try { return CurrentExceptionMessage(); } catch (...) { static constexpr char ErrorMessage[] = "Cannot take current exception message in WithAbortOnException"; return TSafeMessage(ErrorMessage); } } } // namespace void DieWithCurrentException(const char* moduleName) noexcept { Y_ABORT("Die inside WithAbortOnException of %s: %s", moduleName, GetCurrentMessageSafe(SafeCurrentExceptionMessage())); } } // namespace NYql::NInternal