diff --git a/llvm/include/llvm/ExecutionEngine/Orc/OrcError.h b/llvm/include/llvm/ExecutionEngine/Orc/OrcError.h index e5d6a3eca85f..61e2e49a872a 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/OrcError.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/OrcError.h @@ -14,6 +14,8 @@ #define LLVM_EXECUTIONENGINE_ORC_ORCERROR_H #include "llvm/Support/Error.h" +#include "llvm/Support/raw_ostream.h" +#include #include namespace llvm { diff --git a/llvm/include/llvm/module.modulemap b/llvm/include/llvm/module.modulemap index ecb3b37004fd..856cd96bba0a 100644 --- a/llvm/include/llvm/module.modulemap +++ b/llvm/include/llvm/module.modulemap @@ -169,12 +169,31 @@ module LLVM_ExecutionEngine { // FIXME: These exclude directives were added as a workaround for // and should be removed once it is fixed. - exclude header "ExecutionEngine/Orc/RawByteChannel.h" - exclude header "ExecutionEngine/Orc/RPCUtils.h" exclude header "ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.h" exclude header "ExecutionEngine/Orc/OrcRemoteTargetClient.h" exclude header "ExecutionEngine/Orc/OrcRemoteTargetServer.h" exclude header "ExecutionEngine/Orc/RemoteObjectLayer.h" + + // Exclude headers from LLVM_OrcSupport. + exclude header "ExecutionEngine/Orc/OrcError.h" + exclude header "ExecutionEngine/Orc/RPC/RPCUtils.h" + exclude header "ExecutionEngine/Orc/RPC/RPCSerialization.h" + exclude header "ExecutionEngine/Orc/RPC/RawByteChannel.h" + +} + +// Orc utilities that don't depend only on Support (not ExecutionEngine or +// IR). This is a workaround for ExecutionEngine's broken layering, and will +// be removed in the future. +module LLVM_OrcSupport { + requires cplusplus + + header "ExecutionEngine/Orc/OrcError.h" + header "ExecutionEngine/Orc/RPC/RPCUtils.h" + header "ExecutionEngine/Orc/RPC/RPCSerialization.h" + header "ExecutionEngine/Orc/RPC/RawByteChannel.h" + + export * } module LLVM_Pass { diff --git a/llvm/lib/ExecutionEngine/OrcError/OrcError.cpp b/llvm/lib/ExecutionEngine/OrcError/OrcError.cpp index e6e9a095319c..5eab246d4b48 100644 --- a/llvm/lib/ExecutionEngine/OrcError/OrcError.cpp +++ b/llvm/lib/ExecutionEngine/OrcError/OrcError.cpp @@ -14,6 +14,8 @@ #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ManagedStatic.h" +#include + using namespace llvm; using namespace llvm::orc; diff --git a/llvm/lib/ExecutionEngine/OrcError/RPCError.cpp b/llvm/lib/ExecutionEngine/OrcError/RPCError.cpp index b77a526f5718..3cf78fd9f7ba 100644 --- a/llvm/lib/ExecutionEngine/OrcError/RPCError.cpp +++ b/llvm/lib/ExecutionEngine/OrcError/RPCError.cpp @@ -11,6 +11,11 @@ //===----------------------------------------------------------------------===// #include "llvm/ExecutionEngine/Orc/RPC/RPCUtils.h" +#include "llvm/Support/Error.h" +#include "llvm/Support/raw_ostream.h" + +#include +#include char llvm::orc::rpc::RPCFatalError::ID = 0; char llvm::orc::rpc::ConnectionClosed::ID = 0; diff --git a/llvm/lib/Support/Error.cpp b/llvm/lib/Support/Error.cpp index 9ea08c37478e..27e0a49e9b80 100644 --- a/llvm/lib/Support/Error.cpp +++ b/llvm/lib/Support/Error.cpp @@ -10,6 +10,7 @@ #include "llvm/ADT/Twine.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ManagedStatic.h" +#include "llvm/Support/Signals.h" #include using namespace llvm; @@ -103,11 +104,13 @@ std::error_code errorToErrorCode(Error Err) { #if LLVM_ENABLE_ABI_BREAKING_CHECKS void Error::fatalUncheckedError() const { dbgs() << "Program aborted due to an unhandled Error:\n"; - if (getPtr()) + if (getPtr()) { getPtr()->log(dbgs()); - else + dbgs() << "\n"; + }else dbgs() << "Error value was Success. (Note: Success values must still be " "checked prior to being destroyed).\n"; + PrintStackTrace(); abort(); } #endif