[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
This commit is contained in:
Lang Hames 2017-04-06 01:35:13 +00:00
parent 57cceedbb1
commit e128ff2ea9
4 changed files with 25 additions and 20 deletions

View File

@ -33,7 +33,7 @@ enum class OrcErrorCode : int {
UnknownRPCFunction
};
Error orcError(OrcErrorCode ErrCode);
std::error_code orcError(OrcErrorCode ErrCode);
class RPCFunctionNotSupported : public ErrorInfo<RPCFunctionNotSupported> {
public:

View File

@ -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<void *>(static_cast<uintptr_t>(Addr));
DEBUG(dbgs() << " Allocator " << Id << " set permissions on " << LocalAddr

View File

@ -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));
}
}

View File

@ -60,19 +60,16 @@ namespace orc {
char RPCFunctionNotSupported::ID = 0;
Error orcError(OrcErrorCode ErrCode) {
std::error_code orcError(OrcErrorCode ErrCode) {
typedef std::underlying_type<OrcErrorCode>::type UT;
return errorCodeToError(
std::error_code(static_cast<UT>(ErrCode), *OrcErrCat));
return std::error_code(static_cast<UT>(ErrCode), *OrcErrCat);
}
RPCFunctionNotSupported::RPCFunctionNotSupported(std::string RPCFunctionSignature)
: RPCFunctionSignature(std::move(RPCFunctionSignature)) {}
std::error_code RPCFunctionNotSupported::convertToErrorCode() const {
typedef std::underlying_type<OrcErrorCode>::type UT;
return std::error_code(static_cast<UT>(OrcErrorCode::UnknownRPCFunction),
*OrcErrCat);
return orcError(OrcErrorCode::UnknownRPCFunction);
}
void RPCFunctionNotSupported::log(raw_ostream &OS) const {