]> granicus.if.org Git - llvm/commitdiff
[Orc] Make orcError return an error_code rather than Error.
authorLang Hames <lhames@gmail.com>
Thu, 6 Apr 2017 01:35:13 +0000 (01:35 +0000)
committerLang Hames <lhames@gmail.com>
Thu, 6 Apr 2017 01:35:13 +0000 (01:35 +0000)
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
include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h
include/llvm/ExecutionEngine/Orc/RPCUtils.h
lib/ExecutionEngine/Orc/OrcError.cpp

index 34ce2c174c4bd6b7ac1fccdc9b7ebe973ba4eaf4..2fe4a5ee0588998a51ef21087638fb7cadcb4fb9 100644 (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:
index 506330fe3a5e9e49caeb079d9bdea043d291c52f..a61ff102be0b072c9643d5c95cf95f495022b7f2 100644 (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
index 7047261d233f3afaded7213c3c8495320826a735..5aa1ef8d39a5c8f0da640a9fabe2c26f484d90c6 100644 (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));
       }
     }
 
index eaa75ad06a2ef504cd6d4868a2b771a668d2e101..dcbbf5f2ae7000f64bc2a39c0cb865036ae654d6 100644 (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 {