From e128ff2ea9808910762253462ef64ecacaa185f6 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Thu, 6 Apr 2017 01:35:13 +0000 Subject: [PATCH] [Orc] Make orcError return an error_code rather than Error. This will allow orcError to be used in convertToErrorCode implementations, which will help in transitioning Orc RPC to Error. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@299610 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ExecutionEngine/Orc/OrcError.h | 2 +- .../Orc/OrcRemoteTargetServer.h | 23 ++++++++++++------- include/llvm/ExecutionEngine/Orc/RPCUtils.h | 11 +++++---- lib/ExecutionEngine/Orc/OrcError.cpp | 9 +++----- 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/include/llvm/ExecutionEngine/Orc/OrcError.h b/include/llvm/ExecutionEngine/Orc/OrcError.h index 34ce2c174c4..2fe4a5ee058 100644 --- a/include/llvm/ExecutionEngine/Orc/OrcError.h +++ b/include/llvm/ExecutionEngine/Orc/OrcError.h @@ -33,7 +33,7 @@ enum class OrcErrorCode : int { UnknownRPCFunction }; -Error orcError(OrcErrorCode ErrCode); +std::error_code orcError(OrcErrorCode ErrCode); class RPCFunctionNotSupported : public ErrorInfo { public: diff --git a/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h b/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h index 506330fe3a5..a61ff102be0 100644 --- a/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h +++ b/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h @@ -132,7 +132,7 @@ private: Error setProtections(void *block, unsigned Flags) { auto I = Allocs.find(block); if (I == Allocs.end()) - return orcError(OrcErrorCode::RemoteMProtectAddrUnrecognized); + return errorCodeToError(orcError(OrcErrorCode::RemoteMProtectAddrUnrecognized)); return errorCodeToError( sys::Memory::protectMappedMemory(I->second, Flags)); } @@ -198,7 +198,8 @@ private: Error handleCreateRemoteAllocator(ResourceIdMgr::ResourceId Id) { auto I = Allocators.find(Id); if (I != Allocators.end()) - return orcError(OrcErrorCode::RemoteAllocatorIdAlreadyInUse); + return errorCodeToError( + orcError(OrcErrorCode::RemoteAllocatorIdAlreadyInUse)); DEBUG(dbgs() << " Created allocator " << Id << "\n"); Allocators[Id] = Allocator(); return Error::success(); @@ -207,7 +208,8 @@ private: Error handleCreateIndirectStubsOwner(ResourceIdMgr::ResourceId Id) { auto I = IndirectStubsOwners.find(Id); if (I != IndirectStubsOwners.end()) - return orcError(OrcErrorCode::RemoteIndirectStubsOwnerIdAlreadyInUse); + return errorCodeToError( + orcError(OrcErrorCode::RemoteIndirectStubsOwnerIdAlreadyInUse)); DEBUG(dbgs() << " Create indirect stubs owner " << Id << "\n"); IndirectStubsOwners[Id] = ISBlockOwnerList(); return Error::success(); @@ -224,7 +226,8 @@ private: Error handleDestroyRemoteAllocator(ResourceIdMgr::ResourceId Id) { auto I = Allocators.find(Id); if (I == Allocators.end()) - return orcError(OrcErrorCode::RemoteAllocatorDoesNotExist); + return errorCodeToError( + orcError(OrcErrorCode::RemoteAllocatorDoesNotExist)); Allocators.erase(I); DEBUG(dbgs() << " Destroyed allocator " << Id << "\n"); return Error::success(); @@ -233,7 +236,8 @@ private: Error handleDestroyIndirectStubsOwner(ResourceIdMgr::ResourceId Id) { auto I = IndirectStubsOwners.find(Id); if (I == IndirectStubsOwners.end()) - return orcError(OrcErrorCode::RemoteIndirectStubsOwnerDoesNotExist); + return errorCodeToError( + orcError(OrcErrorCode::RemoteIndirectStubsOwnerDoesNotExist)); IndirectStubsOwners.erase(I); return Error::success(); } @@ -246,7 +250,8 @@ private: auto StubOwnerItr = IndirectStubsOwners.find(Id); if (StubOwnerItr == IndirectStubsOwners.end()) - return orcError(OrcErrorCode::RemoteIndirectStubsOwnerDoesNotExist); + return errorCodeToError( + orcError(OrcErrorCode::RemoteIndirectStubsOwnerDoesNotExist)); typename TargetT::IndirectStubsInfo IS; if (auto Err = @@ -361,7 +366,8 @@ private: uint64_t Size, uint32_t Align) { auto I = Allocators.find(Id); if (I == Allocators.end()) - return orcError(OrcErrorCode::RemoteAllocatorDoesNotExist); + return errorCodeToError( + orcError(OrcErrorCode::RemoteAllocatorDoesNotExist)); auto &Allocator = I->second; void *LocalAllocAddr = nullptr; if (auto Err = Allocator.allocate(LocalAllocAddr, Size, Align)) @@ -380,7 +386,8 @@ private: JITTargetAddress Addr, uint32_t Flags) { auto I = Allocators.find(Id); if (I == Allocators.end()) - return orcError(OrcErrorCode::RemoteAllocatorDoesNotExist); + return errorCodeToError( + orcError(OrcErrorCode::RemoteAllocatorDoesNotExist)); auto &Allocator = I->second; void *LocalAddr = reinterpret_cast(static_cast(Addr)); DEBUG(dbgs() << " Allocator " << Id << " set permissions on " << LocalAddr diff --git a/include/llvm/ExecutionEngine/Orc/RPCUtils.h b/include/llvm/ExecutionEngine/Orc/RPCUtils.h index 7047261d233..5aa1ef8d39a 100644 --- a/include/llvm/ExecutionEngine/Orc/RPCUtils.h +++ b/include/llvm/ExecutionEngine/Orc/RPCUtils.h @@ -500,7 +500,7 @@ public: // Create an error instance representing an abandoned response. static Error createAbandonedResponseError() { - return orcError(OrcErrorCode::RPCResponseAbandoned); + return errorCodeToError(orcError(OrcErrorCode::RPCResponseAbandoned)); } }; @@ -522,7 +522,7 @@ public: return Err; if (auto Err = C.endReceiveMessage()) return Err; - return Handler(Result); + return Handler(std::move(Result)); } // Abandon this response by calling the handler with an 'abandoned response' @@ -817,7 +817,8 @@ public: // This isn't a channel error so we don't want to abandon other pending // responses, but we still need to run the user handler with an error to // let them know the call failed. - if (auto Err = Handler(orcError(OrcErrorCode::UnknownRPCFunction))) + if (auto Err = Handler(errorCodeToError( + orcError(OrcErrorCode::UnknownRPCFunction)))) report_fatal_error(std::move(Err)); return FnIdOrErr.takeError(); } @@ -884,7 +885,7 @@ public: return I->second(C, SeqNo); // else: No handler found. Report error to client? - return orcError(OrcErrorCode::UnexpectedRPCCall); + return errorCodeToError(orcError(OrcErrorCode::UnexpectedRPCCall)); } /// Helper for handling setter procedures - this method returns a functor that @@ -994,7 +995,7 @@ protected: // Unlock the pending results map to prevent recursive lock. Lock.unlock(); abandonPendingResponses(); - return orcError(OrcErrorCode::UnexpectedRPCResponse); + return errorCodeToError(orcError(OrcErrorCode::UnexpectedRPCResponse)); } } diff --git a/lib/ExecutionEngine/Orc/OrcError.cpp b/lib/ExecutionEngine/Orc/OrcError.cpp index eaa75ad06a2..dcbbf5f2ae7 100644 --- a/lib/ExecutionEngine/Orc/OrcError.cpp +++ b/lib/ExecutionEngine/Orc/OrcError.cpp @@ -60,19 +60,16 @@ namespace orc { char RPCFunctionNotSupported::ID = 0; -Error orcError(OrcErrorCode ErrCode) { +std::error_code orcError(OrcErrorCode ErrCode) { typedef std::underlying_type::type UT; - return errorCodeToError( - std::error_code(static_cast(ErrCode), *OrcErrCat)); + return std::error_code(static_cast(ErrCode), *OrcErrCat); } RPCFunctionNotSupported::RPCFunctionNotSupported(std::string RPCFunctionSignature) : RPCFunctionSignature(std::move(RPCFunctionSignature)) {} std::error_code RPCFunctionNotSupported::convertToErrorCode() const { - typedef std::underlying_type::type UT; - return std::error_code(static_cast(OrcErrorCode::UnknownRPCFunction), - *OrcErrCat); + return orcError(OrcErrorCode::UnknownRPCFunction); } void RPCFunctionNotSupported::log(raw_ostream &OS) const {