From: Lang Hames Date: Thu, 17 Nov 2016 02:33:47 +0000 (+0000) Subject: [Orc] Clang-format the recent RPC update (r286620 and related). X-Git-Tag: llvmorg-4.0.0-rc1~4334 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fd264f7e8492933a2a96163a9320df75cf33cb6d;p=platform%2Fupstream%2Fllvm.git [Orc] Clang-format the recent RPC update (r286620 and related). llvm-svn: 287195 --- diff --git a/llvm/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetClient.h b/llvm/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetClient.h index 5b2f892..8647db5 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetClient.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetClient.h @@ -36,7 +36,6 @@ namespace remote { template class OrcRemoteTargetClient : public OrcRemoteTargetRPCAPI { public: - /// Remote memory manager. class RCMemoryManager : public RuntimeDyld::MemoryManager { public: @@ -45,10 +44,10 @@ public: DEBUG(dbgs() << "Created remote allocator " << Id << "\n"); } - RCMemoryManager(const RCMemoryManager&) = delete; - RCMemoryManager& operator=(const RCMemoryManager&) = delete; - RCMemoryManager(RCMemoryManager&&) = default; - RCMemoryManager& operator=(RCMemoryManager&&) = default; + RCMemoryManager(const RCMemoryManager &) = delete; + RCMemoryManager &operator=(const RCMemoryManager &) = delete; + RCMemoryManager(RCMemoryManager &&) = default; + RCMemoryManager &operator=(RCMemoryManager &&) = default; ~RCMemoryManager() override { Client.destroyRemoteAllocator(Id); @@ -342,10 +341,10 @@ public: Alloc(uint64_t Size, unsigned Align) : Size(Size), Align(Align), Contents(new char[Size + Align - 1]) {} - Alloc(const Alloc&) = delete; - Alloc& operator=(const Alloc&) = delete; - Alloc(Alloc&&) = default; - Alloc& operator=(Alloc&&) = default; + Alloc(const Alloc &) = delete; + Alloc &operator=(const Alloc &) = delete; + Alloc(Alloc &&) = default; + Alloc &operator=(Alloc &&) = default; uint64_t getSize() const { return Size; } @@ -373,9 +372,9 @@ public: struct ObjectAllocs { ObjectAllocs() = default; ObjectAllocs(const ObjectAllocs &) = delete; - ObjectAllocs& operator=(const ObjectAllocs &) = delete; - ObjectAllocs(ObjectAllocs&&) = default; - ObjectAllocs& operator=(ObjectAllocs&&) = default; + ObjectAllocs &operator=(const ObjectAllocs &) = delete; + ObjectAllocs(ObjectAllocs &&) = default; + ObjectAllocs &operator=(ObjectAllocs &&) = default; JITTargetAddress RemoteCodeAddr = 0; JITTargetAddress RemoteRODataAddr = 0; @@ -544,8 +543,8 @@ public: static Expected> Create(ChannelT &Channel) { Error Err = Error::success(); - std::unique_ptr - Client(new OrcRemoteTargetClient(Channel, Err)); + std::unique_ptr Client( + new OrcRemoteTargetClient(Channel, Err)); if (Err) return std::move(Err); return std::move(Client); @@ -631,7 +630,6 @@ public: Error terminateSession() { return callB(); } private: - OrcRemoteTargetClient(ChannelT &Channel, Error &Err) : OrcRemoteTargetRPCAPI(Channel) { ErrorAsOutParameter EAO(&Err); diff --git a/llvm/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.h b/llvm/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.h index 413e286..ab2b0fa 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.h @@ -16,8 +16,8 @@ #ifndef LLVM_EXECUTIONENGINE_ORC_ORCREMOTETARGETRPCAPI_H #define LLVM_EXECUTIONENGINE_ORC_ORCREMOTETARGETRPCAPI_H -#include "RawByteChannel.h" #include "RPCUtils.h" +#include "RawByteChannel.h" #include "llvm/ExecutionEngine/JITSymbol.h" namespace llvm { @@ -44,19 +44,17 @@ private: namespace rpc { -template <> -class RPCTypeName { +template <> class RPCTypeName { public: static const char *getName() { return "DirectBufferWriter"; } }; template -class SerializationTraits:: - value>::type> { +class SerializationTraits< + ChannelT, remote::DirectBufferWriter, remote::DirectBufferWriter, + typename std::enable_if< + std::is_base_of::value>::type> { public: - static Error serialize(ChannelT &C, const remote::DirectBufferWriter &DBW) { if (auto EC = serializeSeq(C, DBW.getDst())) return EC; @@ -85,7 +83,7 @@ public: namespace remote { class OrcRemoteTargetRPCAPI - : public rpc::SingleThreadedRPC { + : public rpc::SingleThreadedRPC { protected: class ResourceIdMgr { public: @@ -112,159 +110,154 @@ public: OrcRemoteTargetRPCAPI(rpc::RawByteChannel &C) : rpc::SingleThreadedRPC(C, true) {} - class CallIntVoid : public rpc::Function { + class CallIntVoid + : public rpc::Function { public: - static const char* getName() { return "CallIntVoid"; } + static const char *getName() { return "CallIntVoid"; } }; class CallMain - : public rpc::Function Args)> { + : public rpc::Function Args)> { public: - static const char* getName() { return "CallMain"; } + static const char *getName() { return "CallMain"; } }; - class CallVoidVoid : public rpc::Function { + class CallVoidVoid + : public rpc::Function { public: - static const char* getName() { return "CallVoidVoid"; } + static const char *getName() { return "CallVoidVoid"; } }; class CreateRemoteAllocator - : public rpc::Function { + : public rpc::Function { public: - static const char* getName() { return "CreateRemoteAllocator"; } + static const char *getName() { return "CreateRemoteAllocator"; } }; class CreateIndirectStubsOwner - : public rpc::Function { + : public rpc::Function { public: - static const char* getName() { return "CreateIndirectStubsOwner"; } + static const char *getName() { return "CreateIndirectStubsOwner"; } }; class DeregisterEHFrames - : public rpc::Function { + : public rpc::Function { public: - static const char* getName() { return "DeregisterEHFrames"; } + static const char *getName() { return "DeregisterEHFrames"; } }; class DestroyRemoteAllocator - : public rpc::Function { + : public rpc::Function { public: - static const char* getName() { return "DestroyRemoteAllocator"; } + static const char *getName() { return "DestroyRemoteAllocator"; } }; class DestroyIndirectStubsOwner - : public rpc::Function { + : public rpc::Function { public: - static const char* getName() { return "DestroyIndirectStubsOwner"; } + static const char *getName() { return "DestroyIndirectStubsOwner"; } }; /// EmitIndirectStubs result is (StubsBase, PtrsBase, NumStubsEmitted). class EmitIndirectStubs - : public rpc::Function( - ResourceIdMgr::ResourceId StubsOwnerID, - uint32_t NumStubsRequired)> { + : public rpc::Function< + EmitIndirectStubs, + std::tuple( + ResourceIdMgr::ResourceId StubsOwnerID, + uint32_t NumStubsRequired)> { public: - static const char* getName() { return "EmitIndirectStubs"; } + static const char *getName() { return "EmitIndirectStubs"; } }; class EmitResolverBlock : public rpc::Function { public: - static const char* getName() { return "EmitResolverBlock"; } + static const char *getName() { return "EmitResolverBlock"; } }; /// EmitTrampolineBlock result is (BlockAddr, NumTrampolines). class EmitTrampolineBlock - : public rpc::Function()> { + : public rpc::Function()> { public: - static const char* getName() { return "EmitTrampolineBlock"; } + static const char *getName() { return "EmitTrampolineBlock"; } }; class GetSymbolAddress - : public rpc::Function { + : public rpc::Function { public: - static const char* getName() { return "GetSymbolAddress"; } + static const char *getName() { return "GetSymbolAddress"; } }; /// GetRemoteInfo result is (Triple, PointerSize, PageSize, TrampolineSize, /// IndirectStubsSize). class GetRemoteInfo - : public rpc::Function()> { + : public rpc::Function< + GetRemoteInfo, + std::tuple()> { public: - static const char* getName() { return "GetRemoteInfo"; } + static const char *getName() { return "GetRemoteInfo"; } }; class ReadMem - : public rpc::Function(JITTargetAddress Src, - uint64_t Size)> { + : public rpc::Function(JITTargetAddress Src, + uint64_t Size)> { public: - static const char* getName() { return "ReadMem"; } + static const char *getName() { return "ReadMem"; } }; class RegisterEHFrames - : public rpc::Function { + : public rpc::Function { public: - static const char* getName() { return "RegisterEHFrames"; } + static const char *getName() { return "RegisterEHFrames"; } }; class ReserveMem - : public rpc::Function { + : public rpc::Function { public: - static const char* getName() { return "ReserveMem"; } + static const char *getName() { return "ReserveMem"; } }; class RequestCompile - : public rpc::Function { + : public rpc::Function< + RequestCompile, JITTargetAddress(JITTargetAddress TrampolineAddr)> { public: - static const char* getName() { return "RequestCompile"; } + static const char *getName() { return "RequestCompile"; } }; class SetProtections - : public rpc::Function { + : public rpc::Function { public: - static const char* getName() { return "SetProtections"; } + static const char *getName() { return "SetProtections"; } }; class TerminateSession : public rpc::Function { public: - static const char* getName() { return "TerminateSession"; } + static const char *getName() { return "TerminateSession"; } }; - class WriteMem : public rpc::Function { + class WriteMem + : public rpc::Function { public: - static const char* getName() { return "WriteMem"; } + static const char *getName() { return "WriteMem"; } }; - class WritePtr - : public rpc::Function { + class WritePtr : public rpc::Function { public: - static const char* getName() { return "WritePtr"; } + static const char *getName() { return "WritePtr"; } }; - }; } // end namespace remote diff --git a/llvm/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h b/llvm/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h index f6226bc..506330f 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h @@ -16,9 +16,9 @@ #define LLVM_EXECUTIONENGINE_ORC_ORCREMOTETARGETSERVER_H #include "OrcRemoteTargetRPCAPI.h" -#include "llvm/ExecutionEngine/RTDyldMemoryManager.h" #include "llvm/ExecutionEngine/JITSymbol.h" #include "llvm/ExecutionEngine/Orc/OrcError.h" +#include "llvm/ExecutionEngine/RTDyldMemoryManager.h" #include "llvm/Support/Debug.h" #include "llvm/Support/Error.h" #include "llvm/Support/Format.h" @@ -68,13 +68,13 @@ public: addHandler(*this, &ThisT::handleCallVoidVoid); addHandler(*this, &ThisT::handleCreateRemoteAllocator); - addHandler(*this, - &ThisT::handleCreateIndirectStubsOwner); + addHandler( + *this, &ThisT::handleCreateIndirectStubsOwner); addHandler(*this, &ThisT::handleDeregisterEHFrames); addHandler(*this, &ThisT::handleDestroyRemoteAllocator); - addHandler(*this, - &ThisT::handleDestroyIndirectStubsOwner); + addHandler( + *this, &ThisT::handleDestroyIndirectStubsOwner); addHandler(*this, &ThisT::handleEmitIndirectStubs); addHandler(*this, &ThisT::handleEmitResolverBlock); addHandler(*this, &ThisT::handleEmitTrampolineBlock); @@ -96,7 +96,6 @@ public: OrcRemoteTargetServer(OrcRemoteTargetServer &&Other) = default; OrcRemoteTargetServer &operator=(OrcRemoteTargetServer &&) = delete; - Expected requestCompile(JITTargetAddress TrampolineAddr) { return callB(TrampolineAddr); } @@ -254,12 +253,10 @@ private: TargetT::emitIndirectStubsBlock(IS, NumStubsRequired, nullptr)) return std::move(Err); - JITTargetAddress StubsBase = - static_cast( - reinterpret_cast(IS.getStub(0))); - JITTargetAddress PtrsBase = - static_cast( - reinterpret_cast(IS.getPtr(0))); + JITTargetAddress StubsBase = static_cast( + reinterpret_cast(IS.getStub(0))); + JITTargetAddress PtrsBase = static_cast( + reinterpret_cast(IS.getPtr(0))); uint32_t NumStubsEmitted = IS.getNumStubs(); auto &BlockList = StubOwnerItr->second; @@ -307,9 +304,8 @@ private: TrampolineBlocks.push_back(std::move(TrampolineBlock)); - auto TrampolineBaseAddr = - static_cast( - reinterpret_cast(TrampolineMem)); + auto TrampolineBaseAddr = static_cast( + reinterpret_cast(TrampolineMem)); return std::make_tuple(TrampolineBaseAddr, NumTrampolines); } @@ -340,7 +336,7 @@ private: Expected> handleReadMem(JITTargetAddress RSrc, uint64_t Size) { - uint8_t *Src = reinterpret_cast(static_cast(RSrc)); + uint8_t *Src = reinterpret_cast(static_cast(RSrc)); DEBUG(dbgs() << " Reading " << Size << " bytes from " << format("0x%016x", RSrc) << "\n"); @@ -374,15 +370,14 @@ private: DEBUG(dbgs() << " Allocator " << Id << " reserved " << LocalAllocAddr << " (" << Size << " bytes, alignment " << Align << ")\n"); - JITTargetAddress AllocAddr = - static_cast( - reinterpret_cast(LocalAllocAddr)); + JITTargetAddress AllocAddr = static_cast( + reinterpret_cast(LocalAllocAddr)); return AllocAddr; } - Error handleSetProtections(ResourceIdMgr::ResourceId Id, JITTargetAddress Addr, - uint32_t Flags) { + Error handleSetProtections(ResourceIdMgr::ResourceId Id, + JITTargetAddress Addr, uint32_t Flags) { auto I = Allocators.find(Id); if (I == Allocators.end()) return orcError(OrcErrorCode::RemoteAllocatorDoesNotExist); diff --git a/llvm/include/llvm/ExecutionEngine/Orc/RPCUtils.h b/llvm/include/llvm/ExecutionEngine/Orc/RPCUtils.h index f616057..68ce2c0 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/RPCUtils.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/RPCUtils.h @@ -47,8 +47,7 @@ namespace llvm { namespace orc { namespace rpc { -template -class Function; +template class Function; // RPC Function class. // DerivedFunc should be a user defined class with a static 'getName()' method @@ -56,7 +55,6 @@ class Function; template class Function { public: - /// User defined function type. using Type = RetT(ArgTs...); @@ -72,12 +70,12 @@ public: << "(" << llvm::orc::rpc::RPCTypeNameSequence() << ")"; return Name.data(); } + private: static std::mutex NameMutex; static std::string Name; }; - template std::mutex Function::NameMutex; @@ -101,24 +99,20 @@ std::string Function::Name; /// /// template T allocate(): /// Allocate a unique id for function Func. -template -class RPCFunctionIdAllocator; +template class RPCFunctionIdAllocator; /// This specialization of RPCFunctionIdAllocator provides a default /// implementation for integral types. template -class RPCFunctionIdAllocator::value - >::type> { +class RPCFunctionIdAllocator< + T, typename std::enable_if::value>::type> { public: - static T getInvalidId() { return T(0); } static T getResponseId() { return T(1); } static T getNegotiateId() { return T(2); } - template - T allocate(){ return NextId++; } + template T allocate() { return NextId++; } + private: T NextId = 3; }; @@ -131,63 +125,62 @@ namespace detail { namespace msvc_hacks { - // Work around MSVC's future implementation's use of default constructors: - // A default constructed value in the promise will be overwritten when the - // real error is set - so the default constructed Error has to be checked - // already. - class MSVCPError : public Error { - public: - - MSVCPError() { - (void)!!*this; - } - - MSVCPError(MSVCPError &&Other) : Error(std::move(Other)) {} - - MSVCPError& operator=(MSVCPError Other) { - Error::operator=(std::move(Other)); - return *this; - } - - MSVCPError(Error Err) : Error(std::move(Err)) {} - }; - - // Work around MSVC's future implementation, similar to MSVCPError. - template - class MSVCPExpected : public Expected { - public: +// Work around MSVC's future implementation's use of default constructors: +// A default constructed value in the promise will be overwritten when the +// real error is set - so the default constructed Error has to be checked +// already. +class MSVCPError : public Error { +public: + MSVCPError() { (void)!!*this; } - MSVCPExpected() - : Expected(make_error("", inconvertibleErrorCode())) { - consumeError(this->takeError()); - } + MSVCPError(MSVCPError &&Other) : Error(std::move(Other)) {} - MSVCPExpected(MSVCPExpected &&Other) : Expected(std::move(Other)) {} + MSVCPError &operator=(MSVCPError Other) { + Error::operator=(std::move(Other)); + return *this; + } - MSVCPExpected& operator=(MSVCPExpected &&Other) { - Expected::operator=(std::move(Other)); - return *this; - } + MSVCPError(Error Err) : Error(std::move(Err)) {} +}; - MSVCPExpected(Error Err) : Expected(std::move(Err)) {} +// Work around MSVC's future implementation, similar to MSVCPError. +template class MSVCPExpected : public Expected { +public: + MSVCPExpected() + : Expected(make_error("", inconvertibleErrorCode())) { + consumeError(this->takeError()); + } - template - MSVCPExpected(OtherT &&Val, - typename std::enable_if::value>::type - * = nullptr) : Expected(std::move(Val)) {} + MSVCPExpected(MSVCPExpected &&Other) : Expected(std::move(Other)) {} - template - MSVCPExpected( - Expected &&Other, - typename std::enable_if::value>::type * = - nullptr) : Expected(std::move(Other)) {} + MSVCPExpected &operator=(MSVCPExpected &&Other) { + Expected::operator=(std::move(Other)); + return *this; + } - template - explicit MSVCPExpected( - Expected &&Other, - typename std::enable_if::value>::type * = - nullptr) : Expected(std::move(Other)) {} - }; + MSVCPExpected(Error Err) : Expected(std::move(Err)) {} + + template + MSVCPExpected( + OtherT &&Val, + typename std::enable_if::value>::type * = + nullptr) + : Expected(std::move(Val)) {} + + template + MSVCPExpected( + Expected &&Other, + typename std::enable_if::value>::type * = + nullptr) + : Expected(std::move(Other)) {} + + template + explicit MSVCPExpected( + Expected &&Other, + typename std::enable_if::value>::type * = + nullptr) + : Expected(std::move(Other)) {} +}; } // end namespace msvc_hacks @@ -195,10 +188,8 @@ namespace msvc_hacks { // ResultTraits provides typedefs and utilities specific to the return type // of functions. -template -class ResultTraits { +template class ResultTraits { public: - // The return type wrapped in llvm::Expected. using ErrorReturnType = Expected; @@ -229,10 +220,8 @@ public: }; // ResultTraits specialization for void functions. -template <> -class ResultTraits { +template <> class ResultTraits { public: - // For void functions, ErrorReturnType is llvm::Error. using ErrorReturnType = Error; @@ -266,8 +255,7 @@ public: // handlers for void RPC functions to return either void (in which case they // implicitly succeed) or Error (in which case their error return is // propagated). See usage in HandlerTraits::runHandlerHelper. -template <> -class ResultTraits : public ResultTraits {}; +template <> class ResultTraits : public ResultTraits {}; // ResultTraits> is equivalent to ResultTraits. This allows // handlers for RPC functions returning a T to return either a T (in which @@ -293,8 +281,9 @@ static Error respond(ChannelT &C, const FunctionIdT &ResponseId, return Err; // Serialize the result. - if (auto Err = SerializationTraits:: - serialize(C, *ResultOrErr)) + if (auto Err = + SerializationTraits::serialize( + C, *ResultOrErr)) return Err; // Close the response message. @@ -315,32 +304,27 @@ static Error respond(ChannelT &C, const FunctionIdT &ResponseId, } // Converts a given type to the equivalent error return type. -template -class WrappedHandlerReturn { +template class WrappedHandlerReturn { public: using Type = Expected; }; -template -class WrappedHandlerReturn> { +template class WrappedHandlerReturn> { public: using Type = Expected; }; -template <> -class WrappedHandlerReturn { +template <> class WrappedHandlerReturn { public: using Type = Error; }; -template <> -class WrappedHandlerReturn { +template <> class WrappedHandlerReturn { public: using Type = Error; }; -template <> -class WrappedHandlerReturn { +template <> class WrappedHandlerReturn { public: using Type = Error; }; @@ -350,15 +334,14 @@ public: // specialized for function types) and inherits from the appropriate // speciilization for the given non-function type's call operator. template -class HandlerTraits - : public HandlerTraits::type::operator())> {}; +class HandlerTraits : public HandlerTraits::type::operator())> { +}; // Traits for handlers with a given function type. template class HandlerTraits { public: - // Function type of the handler. using Type = RetT(ArgTs...); @@ -366,10 +349,8 @@ public: using ReturnType = RetT; // A std::tuple wrapping the handler arguments. - using ArgStorage = - std::tuple< - typename std::decay< - typename std::remove_reference::type>::type...>; + using ArgStorage = std::tuple::type>::type...>; // Call the given handler with the given arguments. template @@ -393,7 +374,6 @@ public: } private: - // For non-void user handlers: unwrap the args tuple and call the handler, // returning the result. template @@ -414,32 +394,28 @@ private: } template - static - Error deserializeArgsHelper(ChannelT &C, std::tuple &Args, - llvm::index_sequence _) { - return SequenceSerialization:: - deserialize(C, std::get(Args)...); + static Error deserializeArgsHelper(ChannelT &C, std::tuple &Args, + llvm::index_sequence _) { + return SequenceSerialization::deserialize( + C, std::get(Args)...); } - }; // Handler traits for class methods (especially call operators for lambdas). template class HandlerTraits - : public HandlerTraits {}; + : public HandlerTraits {}; // Handler traits for const class methods (especially call operators for // lambdas). template class HandlerTraits - : public HandlerTraits {}; + : public HandlerTraits {}; // Utility to peel the Expected wrapper off a response handler error type. -template -class UnwrapResponseHandlerArg; +template class UnwrapResponseHandlerArg; -template -class UnwrapResponseHandlerArg)> { +template class UnwrapResponseHandlerArg)> { public: using ArgType = ArgT; }; @@ -450,11 +426,9 @@ public: using ArgType = ArgT; }; - // ResponseHandler represents a handler for a not-yet-received function call // result. -template -class ResponseHandler { +template class ResponseHandler { public: virtual ~ResponseHandler() {} @@ -478,17 +452,17 @@ public: template class ResponseHandlerImpl : public ResponseHandler { public: - ResponseHandlerImpl(HandlerT Handler) - : Handler(std::move(Handler)) {} + ResponseHandlerImpl(HandlerT Handler) : Handler(std::move(Handler)) {} // Handle the result by deserializing it from the channel then passing it // to the user defined handler. Error handleResponse(ChannelT &C) override { using ArgType = typename UnwrapResponseHandlerArg< - typename HandlerTraits::Type>::ArgType; + typename HandlerTraits::Type>::ArgType; ArgType Result; - if (auto Err = SerializationTraits:: - deserialize(C, Result)) + if (auto Err = + SerializationTraits::deserialize( + C, Result)) return Err; if (auto Err = C.endReceiveMessage()) return Err; @@ -511,10 +485,9 @@ private: // ResponseHandler subclass for RPC functions with void returns. template class ResponseHandlerImpl - : public ResponseHandler { + : public ResponseHandler { public: - ResponseHandlerImpl(HandlerT Handler) - : Handler(std::move(Handler)) {} + ResponseHandlerImpl(HandlerT Handler) : Handler(std::move(Handler)) {} // Handle the result (no actual value, just a notification that the function // has completed on the remote end) by calling the user-defined handler with @@ -540,10 +513,9 @@ private: // Create a ResponseHandler from a given user handler. template -std::unique_ptr> -createResponseHandler(HandlerT H) { - return llvm::make_unique< - ResponseHandlerImpl>(std::move(H)); +std::unique_ptr> createResponseHandler(HandlerT H) { + return llvm::make_unique>( + std::move(H)); } // Helper for wrapping member functions up as functors. This is useful for @@ -551,12 +523,13 @@ createResponseHandler(HandlerT H) { template class MemberFnWrapper { public: - using MethodT = RetT(ClassT::*)(ArgTs...); + using MethodT = RetT (ClassT::*)(ArgTs...); MemberFnWrapper(ClassT &Instance, MethodT Method) : Instance(Instance), Method(Method) {} RetT operator()(ArgTs &&... Args) { return (Instance.*Method)(std::move(Args)...); } + private: ClassT &Instance; MethodT Method; @@ -578,13 +551,13 @@ public: this->Arg = std::move(ArgVal); return ReadArgs::operator()(ArgVals...); } + private: ArgT &Arg; }; // Manage sequence numbers. -template -class SequenceNumberManager { +template class SequenceNumberManager { public: // Reset, making all sequence numbers available. void reset() { @@ -630,7 +603,6 @@ template class RPCBase { protected: - class OrcRPCInvalid : public Function { public: static const char *getName() { return "__orc_rpc$invalid"; } @@ -642,13 +614,12 @@ protected: }; class OrcRPCNegotiate - : public Function { + : public Function { public: static const char *getName() { return "__orc_rpc$negotiate"; } }; public: - /// Construct an RPC instance on a channel. RPCBase(ChannelT &C, bool LazyAutoNegotiation) : C(C), LazyAutoNegotiation(LazyAutoNegotiation) { @@ -660,10 +631,9 @@ public: // Register the negotiate function id and handler. auto NegotiateId = FnIdAllocator.getNegotiateId(); RemoteFunctionIds[OrcRPCNegotiate::getPrototype()] = NegotiateId; - Handlers[NegotiateId] = - wrapHandler([this](const std::string &Name) { - return handleNegotiate(Name); - }, LaunchPolicy()); + Handlers[NegotiateId] = wrapHandler( + [this](const std::string &Name) { return handleNegotiate(Name); }, + LaunchPolicy()); } /// Append a call Func, does not call send on the channel. @@ -693,8 +663,8 @@ public: // Install the user handler. PendingResponses[SeqNo] = - detail::createResponseHandler( - std::move(Handler)); + detail::createResponseHandler( + std::move(Handler)); // Open the function call message. if (auto Err = C.startSendMessage(FnId, SeqNo)) { @@ -703,9 +673,8 @@ public: } // Serialize the call arguments. - if (auto Err = - detail::HandlerTraits:: - serializeArgs(C, Args...)) { + if (auto Err = detail::HandlerTraits::serializeArgs( + C, Args...)) { abandonPendingResponses(); return joinErrors(std::move(Err), C.endSendMessage()); } @@ -719,7 +688,6 @@ public: return Error::success(); } - template Error callAsync(HandlerT Handler, const ArgTs &... Args) { if (auto Err = appendCallAsync(std::move(Handler), Args...)) @@ -772,8 +740,8 @@ protected: void addHandlerImpl(HandlerT Handler, LaunchPolicy Launch) { FunctionIdT NewFnId = FnIdAllocator.template allocate(); LocalFunctionIds[Func::getPrototype()] = NewFnId; - Handlers[NewFnId] = wrapHandler(std::move(Handler), - std::move(Launch)); + Handlers[NewFnId] = + wrapHandler(std::move(Handler), std::move(Launch)); } // Abandon all outstanding results. @@ -813,8 +781,7 @@ protected: // Find the remote FunctionId for the given function, which must be in the // RemoteFunctionIds map. - template - Expected getRemoteFunctionId() { + template Expected getRemoteFunctionId() { // Try to find the id for the given function. auto I = RemoteFunctionIds.find(Func::getPrototype()); @@ -824,9 +791,9 @@ protected: // Otherwise, if we have auto-negotiation enabled, try to negotiate it. if (LazyAutoNegotiation) { - auto &Impl = static_cast(*this); + auto &Impl = static_cast(*this); if (auto RemoteIdOrErr = - Impl.template callB(Func::getPrototype())) { + Impl.template callB(Func::getPrototype())) { auto &RemoteId = *RemoteIdOrErr; // If autonegotiation indicates that the remote end doesn't support this @@ -849,49 +816,48 @@ protected: return orcError(OrcErrorCode::UnknownRPCFunction); } - using WrappedHandlerFn = std::function; + using WrappedHandlerFn = std::function; // Wrap the given user handler in the necessary argument-deserialization code, // result-serialization code, and call to the launch policy (if present). template WrappedHandlerFn wrapHandler(HandlerT Handler, LaunchPolicy Launch) { - return - [this, Handler, Launch](ChannelT &Channel, SequenceNumberT SeqNo) mutable - -> Error { - // Start by deserializing the arguments. - auto Args = - std::make_shared::ArgStorage>(); - if (auto Err = detail::HandlerTraits:: - deserializeArgs(Channel, *Args)) - return Err; - - // GCC 4.7 and 4.8 incorrectly issue a -Wunused-but-set-variable warning - // for RPCArgs. Void cast RPCArgs to work around this for now. - // FIXME: Remove this workaround once we can assume a working GCC version. - (void)Args; - - // End receieve message, unlocking the channel for reading. - if (auto Err = Channel.endReceiveMessage()) - return Err; - - // Build the handler/responder. - auto Responder = - [this, Handler, Args, &Channel, SeqNo]() mutable -> Error { - using HTraits = detail::HandlerTraits; - using FuncReturn = typename Func::ReturnType; - return detail::respond(Channel, ResponseId, SeqNo, - HTraits::runHandler(Handler, - *Args)); - }; - - // If there is an explicit launch policy then use it to launch the - // handler. - if (Launch) - return Launch(std::move(Responder)); - - // Otherwise run the handler on the listener thread. - return Responder(); + return [this, Handler, Launch](ChannelT &Channel, + SequenceNumberT SeqNo) mutable -> Error { + // Start by deserializing the arguments. + auto Args = std::make_shared< + typename detail::HandlerTraits::ArgStorage>(); + if (auto Err = + detail::HandlerTraits::deserializeArgs( + Channel, *Args)) + return Err; + + // GCC 4.7 and 4.8 incorrectly issue a -Wunused-but-set-variable warning + // for RPCArgs. Void cast RPCArgs to work around this for now. + // FIXME: Remove this workaround once we can assume a working GCC version. + (void)Args; + + // End receieve message, unlocking the channel for reading. + if (auto Err = Channel.endReceiveMessage()) + return Err; + + // Build the handler/responder. + auto Responder = [this, Handler, Args, &Channel, + SeqNo]() mutable -> Error { + using HTraits = detail::HandlerTraits; + using FuncReturn = typename Func::ReturnType; + return detail::respond(Channel, ResponseId, SeqNo, + HTraits::runHandler(Handler, *Args)); }; + + // If there is an explicit launch policy then use it to launch the + // handler. + if (Launch) + return Launch(std::move(Responder)); + + // Otherwise run the handler on the listener thread. + return Responder(); + }; } ChannelT &C; @@ -902,32 +868,29 @@ protected: FunctionIdT ResponseId; std::map LocalFunctionIds; - std::map RemoteFunctionIds; + std::map RemoteFunctionIds; std::map Handlers; detail::SequenceNumberManager SequenceNumberMgr; std::map>> - PendingResponses; + PendingResponses; }; } // end namespace detail - -template class MultiThreadedRPC - : public detail::RPCBase, - ChannelT, FunctionIdT, SequenceNumberT> { + : public detail::RPCBase< + MultiThreadedRPC, ChannelT, + FunctionIdT, SequenceNumberT> { private: using BaseClass = - detail::RPCBase, - ChannelT, FunctionIdT, SequenceNumberT>; + detail::RPCBase, + ChannelT, FunctionIdT, SequenceNumberT>; public: - MultiThreadedRPC(ChannelT &C, bool LazyAutoNegotiation) : BaseClass(C, LazyAutoNegotiation) {} @@ -959,8 +922,7 @@ public: } /// Negotiate a function id for Func with the other end of the channel. - template - Error negotiateFunction() { + template Error negotiateFunction() { using OrcRPCNegotiate = typename BaseClass::OrcRPCNegotiate; if (auto RemoteIdOrErr = callB(Func::getPrototype())) { @@ -971,8 +933,7 @@ public: } /// Convenience method for negotiating multiple functions at once. - template - Error negotiateFunctions() { + template Error negotiateFunctions() { return negotiateFunction(); } @@ -986,8 +947,8 @@ public: /// Return type for non-blocking call primitives. template - using NonBlockingCallResult = - typename detail::ResultTraits::ReturnFutureType; + using NonBlockingCallResult = typename detail::ResultTraits< + typename Func::ReturnType>::ReturnFutureType; /// Call Func on Channel C. Does not block, does not call send. Returns a pair /// of a future result and the sequence number assigned to the result. @@ -997,8 +958,7 @@ public: /// result. In multi-threaded mode the appendCallNB method, which does not /// return the sequence numeber, should be preferred. template - Expected> - appendCallNB(const ArgTs &... Args) { + Expected> appendCallNB(const ArgTs &... Args) { using RTraits = detail::ResultTraits; using ErrorReturn = typename RTraits::ErrorReturnType; using ErrorReturnPromise = typename RTraits::ReturnPromiseType; @@ -1012,7 +972,8 @@ public: [Promise](ErrorReturn RetOrErr) { Promise->set_value(std::move(RetOrErr)); return Error::success(); - }, Args...)) { + }, + Args...)) { this->abandonPendingResponses(); RTraits::consumeAbandoned(FutureResult.get()); return std::move(Err); @@ -1023,15 +984,14 @@ public: /// The same as appendCallNBWithSeq, except that it calls C.send() to /// flush the channel after serializing the call. template - Expected> - callNB(const ArgTs &... Args) { + Expected> callNB(const ArgTs &... Args) { auto Result = appendCallNB(Args...); if (!Result) return Result; if (auto Err = this->C.send()) { this->abandonPendingResponses(); - detail::ResultTraits:: - consumeAbandoned(std::move(Result->get())); + detail::ResultTraits::consumeAbandoned( + std::move(Result->get())); return std::move(Err); } return Result; @@ -1049,8 +1009,8 @@ public: if (auto FutureResOrErr = callNB(Args...)) { if (auto Err = this->C.send()) { this->abandonPendingResponses(); - detail::ResultTraits:: - consumeAbandoned(std::move(FutureResOrErr->get())); + detail::ResultTraits::consumeAbandoned( + std::move(FutureResOrErr->get())); return std::move(Err); } return FutureResOrErr->get(); @@ -1065,27 +1025,22 @@ public: return Err; return Error::success(); } - }; -template class SingleThreadedRPC - : public detail::RPCBase, - ChannelT, FunctionIdT, - SequenceNumberT> { + : public detail::RPCBase< + SingleThreadedRPC, ChannelT, + FunctionIdT, SequenceNumberT> { private: - - using BaseClass = detail::RPCBase, - ChannelT, FunctionIdT, SequenceNumberT>; + using BaseClass = + detail::RPCBase, + ChannelT, FunctionIdT, SequenceNumberT>; using LaunchPolicy = typename BaseClass::LaunchPolicy; public: - SingleThreadedRPC(ChannelT &C, bool LazyAutoNegotiation) : BaseClass(C, LazyAutoNegotiation) {} @@ -1102,8 +1057,7 @@ public: } /// Negotiate a function id for Func with the other end of the channel. - template - Error negotiateFunction() { + template Error negotiateFunction() { using OrcRPCNegotiate = typename BaseClass::OrcRPCNegotiate; if (auto RemoteIdOrErr = callB(Func::getPrototype())) { @@ -1114,8 +1068,7 @@ public: } /// Convenience method for negotiating multiple functions at once. - template - Error negotiateFunctions() { + template Error negotiateFunctions() { return negotiateFunction(); } @@ -1132,8 +1085,7 @@ public: typename detail::ResultTraits::ErrorReturnType callB(const ArgTs &... Args) { bool ReceivedResponse = false; - using ResultType = - typename detail::ResultTraits::ErrorReturnType; + using ResultType = typename detail::ResultTraits::ErrorReturnType; auto Result = detail::ResultTraits::createBlankErrorReturnValue(); // We have to 'Check' result (which we know is in a success state at this @@ -1141,31 +1093,29 @@ public: (void)!!Result; if (auto Err = this->template appendCallAsync( - [&](ResultType R) { - Result = std::move(R); - ReceivedResponse = true; - return Error::success(); - }, Args...)) { + [&](ResultType R) { + Result = std::move(R); + ReceivedResponse = true; + return Error::success(); + }, + Args...)) { this->abandonPendingResponses(); - detail::ResultTraits:: - consumeAbandoned(std::move(Result)); + detail::ResultTraits::consumeAbandoned( + std::move(Result)); return std::move(Err); } while (!ReceivedResponse) { if (auto Err = this->handleOne()) { this->abandonPendingResponses(); - detail::ResultTraits:: - consumeAbandoned(std::move(Result)); + detail::ResultTraits::consumeAbandoned( + std::move(Result)); return std::move(Err); } } return Result; } - - //using detail::RPCBase::handleOne; - }; } // end namespace rpc diff --git a/llvm/include/llvm/ExecutionEngine/Orc/RawByteChannel.h b/llvm/include/llvm/ExecutionEngine/Orc/RawByteChannel.h index c80074f..43b597d 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/RawByteChannel.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/RawByteChannel.h @@ -86,18 +86,15 @@ private: }; template -class SerializationTraits::value && - (std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value || - std::is_same::value)>::type> { +class SerializationTraits< + ChannelT, T, T, + typename std::enable_if< + std::is_base_of::value && + (std::is_same::value || std::is_same::value || + std::is_same::value || std::is_same::value || + std::is_same::value || std::is_same::value || + std::is_same::value || std::is_same::value || + std::is_same::value)>::type> { public: static Error serialize(ChannelT &C, T V) { support::endian::byte_swap(V); @@ -114,9 +111,8 @@ public: template class SerializationTraits::value>:: - type> { + typename std::enable_if::value>::type> { public: static Error serialize(ChannelT &C, bool V) { return C.appendBytes(reinterpret_cast(&V), 1); @@ -129,9 +125,8 @@ public: template class SerializationTraits::value>:: - type> { + typename std::enable_if::value>::type> { public: /// RPC channel serialization for std::strings. static Error serialize(RawByteChannel &C, StringRef S) { @@ -142,27 +137,25 @@ public: }; template -class SerializationTraits::value>:: - type> { +class SerializationTraits::value>::type> { public: static Error serialize(RawByteChannel &C, const char *S) { - return SerializationTraits:: - serialize(C, S); + return SerializationTraits::serialize(C, + S); } }; template class SerializationTraits::value>:: - type> { + typename std::enable_if::value>::type> { public: /// RPC channel serialization for std::strings. static Error serialize(RawByteChannel &C, const std::string &S) { - return SerializationTraits:: - serialize(C, S); + return SerializationTraits::serialize(C, + S); } /// RPC channel deserialization for std::strings.