Files
llvm-project/orc-rt/lib/executor/Error.cpp
Jared Wyles 42a77ce3d6 [orc-rt] Add missing includes for Linux/ARM builds (#188702)
Fixes compilation errors due to missing includes.
2026-03-26 20:43:19 +11:00

79 lines
2.2 KiB
C++

//===- Error.cpp ----------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// Contains the implementation of APIs in the orc-rt/Error.h and
// orc-rt-c/Error.h headers.
//
//===----------------------------------------------------------------------===//
#include "orc-rt/Error.h"
#include "orc-rt-c/Error.h"
#include <cstring>
#include <system_error>
namespace orc_rt {
#if ORC_RT_ENABLE_EXCEPTIONS
std::string ExceptionError::toString() const noexcept {
std::string Result;
try {
std::rethrow_exception(E);
} catch (std::exception &SE) {
Result = SE.what();
E = std::current_exception();
} catch (std::error_code &EC) {
try {
// Technically 'message' itself can throw.
Result = EC.message();
} catch (...) {
Result = "std::error_code (.message() call failed)";
}
E = std::current_exception();
} catch (std::string &ErrMsg) {
Result = ErrMsg;
E = std::current_exception();
} catch (...) {
Result = "C++ exception of unknown type";
E = std::current_exception();
}
return Result;
}
#endif // ORC_RT_ENABLE_EXCEPTIONS
extern "C" orc_rt_Error_TypeId orc_rt_Error_getTypeId(orc_rt_ErrorRef Err) {
assert(Err && "Err must not be null");
return reinterpret_cast<ErrorInfoBase *>(Err)->dynamicClassID();
}
extern "C" void orc_rt_Error_consume(orc_rt_ErrorRef Err) {
consumeError(unwrap(Err));
}
extern "C" void orc_rt_Error_cantFail(orc_rt_ErrorRef Err) {
cantFail(unwrap(Err));
}
extern "C" char *orc_rt_Error_toString(orc_rt_ErrorRef Err) {
return strdup(toString(unwrap(Err)).c_str());
}
extern "C" void orc_rt_Error_freeErrorMessage(char *ErrMsg) { free(ErrMsg); }
extern "C" orc_rt_Error_TypeId orc_rt_StringError_getTypeId(void) {
return StringError::classID();
}
extern "C" orc_rt_ErrorRef orc_rt_StringError_create(const char *ErrMsg) {
return wrap(make_error<StringError>(ErrMsg));
}
} // namespace orc_rt