[llvm] r371843 - [Orc] Address the remaining move-capture FIXMEs

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 16 15:46:51 PDT 2019


This is great! Thanks very much Ben!

-- Lang.

On Fri, Sep 13, 2019 at 4:33 AM Benjamin Kramer via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: d0k
> Date: Fri Sep 13 04:35:33 2019
> New Revision: 371843
>
> URL: http://llvm.org/viewvc/llvm-project?rev=371843&view=rev
> Log:
> [Orc] Address the remaining move-capture FIXMEs
>
> This required spreading unique_function a bit more, which I think is a
> good thing.
>
> Modified:
>     llvm/trunk/examples/SpeculativeJIT/SpeculativeJIT.cpp
>     llvm/trunk/include/llvm/ExecutionEngine/JITSymbol.h
>     llvm/trunk/include/llvm/ExecutionEngine/Orc/Core.h
>     llvm/trunk/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h
>     llvm/trunk/include/llvm/ExecutionEngine/Orc/RPCSerialization.h
>     llvm/trunk/include/llvm/ExecutionEngine/Orc/RPCUtils.h
>     llvm/trunk/include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h
>     llvm/trunk/include/llvm/ExecutionEngine/RuntimeDyld.h
>     llvm/trunk/include/llvm/Support/ThreadPool.h
>     llvm/trunk/lib/ExecutionEngine/Orc/LLJIT.cpp
>     llvm/trunk/lib/ExecutionEngine/Orc/Legacy.cpp
>     llvm/trunk/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
>     llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
>     llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h
>     llvm/trunk/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
>
> Modified: llvm/trunk/examples/SpeculativeJIT/SpeculativeJIT.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/SpeculativeJIT/SpeculativeJIT.cpp?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/examples/SpeculativeJIT/SpeculativeJIT.cpp (original)
> +++ llvm/trunk/examples/SpeculativeJIT/SpeculativeJIT.cpp Fri Sep 13
> 04:35:33 2019
> @@ -114,9 +114,7 @@ private:
>      this->ES->setDispatchMaterialization(
>
>          [this](JITDylib &JD, std::unique_ptr<MaterializationUnit> MU) {
> -          // FIXME: Switch to move capture once we have c  14.
> -          auto SharedMU =
> std::shared_ptr<MaterializationUnit>(std::move(MU));
> -          auto Work = [SharedMU, &JD]() { SharedMU->doMaterialize(JD); };
> +          auto Work = [MU = std::move(MU), &JD] { MU->doMaterialize(JD);
> };
>            CompileThreads.async(std::move(Work));
>          });
>      ExitOnErr(S.addSpeculationRuntime(this->ES->getMainJITDylib(),
> Mangle));
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/JITSymbol.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/JITSymbol.h?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/JITSymbol.h (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/JITSymbol.h Fri Sep 13
> 04:35:33 2019
> @@ -23,6 +23,7 @@
>  #include <string>
>
>  #include "llvm/ADT/BitmaskEnum.h"
> +#include "llvm/ADT/FunctionExtras.h"
>  #include "llvm/ADT/StringRef.h"
>  #include "llvm/Support/Error.h"
>
> @@ -217,7 +218,7 @@ private:
>  /// Represents a symbol in the JIT.
>  class JITSymbol {
>  public:
> -  using GetAddressFtor = std::function<Expected<JITTargetAddress>()>;
> +  using GetAddressFtor = unique_function<Expected<JITTargetAddress>()>;
>
>    /// Create a 'null' symbol, used to represent a "symbol not found"
>    ///        result from a successful (non-erroneous) lookup.
> @@ -325,7 +326,7 @@ class JITSymbolResolver {
>  public:
>    using LookupSet = std::set<StringRef>;
>    using LookupResult = std::map<StringRef, JITEvaluatedSymbol>;
> -  using OnResolvedFunction = std::function<void(Expected<LookupResult>)>;
> +  using OnResolvedFunction =
> unique_function<void(Expected<LookupResult>)>;
>
>    virtual ~JITSymbolResolver() = default;
>
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/Core.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/Core.h?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/Orc/Core.h (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/Orc/Core.h Fri Sep 13 04:35:33
> 2019
> @@ -14,6 +14,7 @@
>  #define LLVM_EXECUTIONENGINE_ORC_CORE_H
>
>  #include "llvm/ADT/BitmaskEnum.h"
> +#include "llvm/ADT/FunctionExtras.h"
>  #include "llvm/ExecutionEngine/JITSymbol.h"
>  #include "llvm/ExecutionEngine/Orc/SymbolStringPool.h"
>  #include "llvm/ExecutionEngine/OrcV1Deprecation.h"
> @@ -107,7 +108,7 @@ raw_ostream &operator<<(raw_ostream &OS,
>  raw_ostream &operator<<(raw_ostream &OS, const SymbolState &S);
>
>  /// Callback to notify client that symbols have been resolved.
> -using SymbolsResolvedCallback = std::function<void(Expected<SymbolMap>)>;
> +using SymbolsResolvedCallback =
> unique_function<void(Expected<SymbolMap>)>;
>
>  /// Callback to register the dependencies for a given query.
>  using RegisterDependenciesFunction =
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h
> (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h Fri
> Sep 13 04:35:33 2019
> @@ -49,28 +49,24 @@ private:
>        switch (EmitState) {
>        case NotEmitted:
>          if (auto GV = searchGVs(Name, ExportedSymbolsOnly)) {
> -          // Create a std::string version of Name to capture here - the
> argument
> -          // (a StringRef) may go away before the lambda is executed.
> -          // FIXME: Use capture-init when we move to C++14.
> -          std::string PName = Name;
>            JITSymbolFlags Flags = JITSymbolFlags::fromGlobalValue(*GV);
> -          auto GetAddress =
> -            [this, ExportedSymbolsOnly, PName, &B]() ->
> Expected<JITTargetAddress> {
> -              if (this->EmitState == Emitting)
> -                return 0;
> -              else if (this->EmitState == NotEmitted) {
> -                this->EmitState = Emitting;
> -                if (auto Err = this->emitToBaseLayer(B))
> -                  return std::move(Err);
> -                this->EmitState = Emitted;
> -              }
> -              if (auto Sym = B.findSymbolIn(K, PName,
> ExportedSymbolsOnly))
> -                return Sym.getAddress();
> -              else if (auto Err = Sym.takeError())
> +          auto GetAddress = [this, ExportedSymbolsOnly, Name = Name.str(),
> +                             &B]() -> Expected<JITTargetAddress> {
> +            if (this->EmitState == Emitting)
> +              return 0;
> +            else if (this->EmitState == NotEmitted) {
> +              this->EmitState = Emitting;
> +              if (auto Err = this->emitToBaseLayer(B))
>                  return std::move(Err);
> -              else
> -                llvm_unreachable("Successful symbol lookup should return "
> -                                 "definition address here");
> +              this->EmitState = Emitted;
> +            }
> +            if (auto Sym = B.findSymbolIn(K, Name, ExportedSymbolsOnly))
> +              return Sym.getAddress();
> +            else if (auto Err = Sym.takeError())
> +              return std::move(Err);
> +            else
> +              llvm_unreachable("Successful symbol lookup should return "
> +                               "definition address here");
>            };
>            return JITSymbol(std::move(GetAddress), Flags);
>          } else
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/RPCSerialization.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/RPCSerialization.h?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/Orc/RPCSerialization.h
> (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/Orc/RPCSerialization.h Fri Sep
> 13 04:35:33 2019
> @@ -359,9 +359,9 @@ public:
>      {
>        assert(KeyName != nullptr && "No keyname pointer");
>        std::lock_guard<std::recursive_mutex> Lock(SerializersMutex);
> -      // FIXME: Move capture Serialize once we have C++14.
>        Serializers[ErrorInfoT::classID()] =
> -          [KeyName, Serialize](ChannelT &C, const ErrorInfoBase &EIB) ->
> Error {
> +          [KeyName, Serialize = std::move(Serialize)](
> +              ChannelT &C, const ErrorInfoBase &EIB) -> Error {
>          assert(EIB.dynamicClassID() == ErrorInfoT::classID() &&
>                 "Serializer called for wrong error type");
>          if (auto Err = serializeSeq(C, *KeyName))
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/RPCUtils.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/RPCUtils.h?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/Orc/RPCUtils.h (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/Orc/RPCUtils.h Fri Sep 13
> 04:35:33 2019
> @@ -1413,14 +1413,12 @@ public:
>      using ErrorReturn = typename RTraits::ErrorReturnType;
>      using ErrorReturnPromise = typename RTraits::ReturnPromiseType;
>
> -    // FIXME: Stack allocate and move this into the handler once LLVM
> builds
> -    //        with C++14.
> -    auto Promise = std::make_shared<ErrorReturnPromise>();
> -    auto FutureResult = Promise->get_future();
> +    ErrorReturnPromise Promise;
> +    auto FutureResult = Promise.get_future();
>
>      if (auto Err = this->template appendCallAsync<Func>(
> -            [Promise](ErrorReturn RetOrErr) {
> -              Promise->set_value(std::move(RetOrErr));
> +            [Promise = std::move(Promise)](ErrorReturn RetOrErr) {
> +              Promise.set_value(std::move(RetOrErr));
>                return Error::success();
>              },
>              Args...)) {
> @@ -1598,8 +1596,7 @@ public:
>      // outstanding calls count, then poke the condition variable.
>      using ArgType = typename detail::ResponseHandlerArg<
>          typename detail::HandlerTraits<HandlerT>::Type>::ArgType;
> -    // FIXME: Move handler into wrapped handler once we have C++14.
> -    auto WrappedHandler = [this, Handler](ArgType Arg) {
> +    auto WrappedHandler = [this, Handler = std::move(Handler)](ArgType
> Arg) {
>        auto Err = Handler(std::move(Arg));
>        std::unique_lock<std::mutex> Lock(M);
>        --NumOutstandingCalls;
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h
> (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h Fri
> Sep 13 04:35:33 2019
> @@ -137,17 +137,12 @@ protected:
>                               RemoteSymbolId Id)
>        : C(C), Id(Id) {}
>
> -    RemoteSymbolMaterializer(const RemoteSymbolMaterializer &Other)
> -      : C(Other.C), Id(Other.Id) {
> -      // FIXME: This is a horrible, auto_ptr-style, copy-as-move
> operation.
> -      //        It should be removed as soon as LLVM has C++14's
> generalized
> -      //        lambda capture (at which point the materializer can be
> moved
> -      //        into the lambda in remoteToJITSymbol below).
> -      const_cast<RemoteSymbolMaterializer&>(Other).Id = 0;
> +    RemoteSymbolMaterializer(RemoteSymbolMaterializer &&Other)
> +        : C(Other.C), Id(Other.Id) {
> +      Other.Id = 0;
>      }
>
> -    RemoteSymbolMaterializer&
> -    operator=(const RemoteSymbolMaterializer&) = delete;
> +    RemoteSymbolMaterializer &operator=(RemoteSymbolMaterializer &&) =
> delete;
>
>      /// Release the remote symbol.
>      ~RemoteSymbolMaterializer() {
> @@ -218,9 +213,9 @@ protected:
>          return nullptr;
>        // else...
>        RemoteSymbolMaterializer RSM(*this, RemoteSym.first);
> -      auto Sym =
> -        JITSymbol([RSM]() mutable { return RSM.materialize(); },
> -                  RemoteSym.second);
> +      auto Sym = JITSymbol(
> +          [RSM = std::move(RSM)]() mutable { return RSM.materialize(); },
> +          RemoteSym.second);
>        return Sym;
>      } else
>        return RemoteSymOrErr.takeError();
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/RuntimeDyld.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/RuntimeDyld.h?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/RuntimeDyld.h (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/RuntimeDyld.h Fri Sep 13
> 04:35:33 2019
> @@ -13,6 +13,7 @@
>  #ifndef LLVM_EXECUTIONENGINE_RUNTIMEDYLD_H
>  #define LLVM_EXECUTIONENGINE_RUNTIMEDYLD_H
>
> +#include "llvm/ADT/FunctionExtras.h"
>  #include "llvm/ADT/STLExtras.h"
>  #include "llvm/ADT/StringRef.h"
>  #include "llvm/DebugInfo/DIContext.h"
> @@ -271,10 +272,10 @@ private:
>                  std::unique_ptr<MemoryBuffer> UnderlyingBuffer,
>                  RuntimeDyld::MemoryManager &MemMgr, JITSymbolResolver
> &Resolver,
>                  bool ProcessAllSections,
> -                std::function<Error(std::unique_ptr<LoadedObjectInfo>,
> -                                    std::map<StringRef,
> JITEvaluatedSymbol>)>
> +                unique_function<Error(std::unique_ptr<LoadedObjectInfo>,
> +                                      std::map<StringRef,
> JITEvaluatedSymbol>)>
>                      OnLoaded,
> -                std::function<void(Error)> OnEmitted);
> +                unique_function<void(Error)> OnEmitted);
>
>    // RuntimeDyldImpl is the actual class. RuntimeDyld is just the public
>    // interface.
> @@ -291,14 +292,14 @@ private:
>  // but ORC's RTDyldObjectLinkingLayer2. Internally it constructs a
> RuntimeDyld
>  // instance and uses continuation passing to perform the fix-up and
> finalize
>  // steps asynchronously.
> -void jitLinkForORC(object::ObjectFile &Obj,
> -                   std::unique_ptr<MemoryBuffer> UnderlyingBuffer,
> -                   RuntimeDyld::MemoryManager &MemMgr,
> -                   JITSymbolResolver &Resolver, bool ProcessAllSections,
> -                   std::function<Error(std::unique_ptr<LoadedObjectInfo>,
> -                                       std::map<StringRef,
> JITEvaluatedSymbol>)>
> -                       OnLoaded,
> -                   std::function<void(Error)> OnEmitted);
> +void jitLinkForORC(
> +    object::ObjectFile &Obj, std::unique_ptr<MemoryBuffer>
> UnderlyingBuffer,
> +    RuntimeDyld::MemoryManager &MemMgr, JITSymbolResolver &Resolver,
> +    bool ProcessAllSections,
> +    unique_function<Error(std::unique_ptr<RuntimeDyld::LoadedObjectInfo>,
> +                          std::map<StringRef, JITEvaluatedSymbol>)>
> +        OnLoaded,
> +    unique_function<void(Error)> OnEmitted);
>
>  } // end namespace llvm
>
>
> Modified: llvm/trunk/include/llvm/Support/ThreadPool.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ThreadPool.h?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/ThreadPool.h (original)
> +++ llvm/trunk/include/llvm/Support/ThreadPool.h Fri Sep 13 04:35:33 2019
> @@ -13,6 +13,7 @@
>  #ifndef LLVM_SUPPORT_THREAD_POOL_H
>  #define LLVM_SUPPORT_THREAD_POOL_H
>
> +#include "llvm/ADT/FunctionExtras.h"
>  #include "llvm/Config/llvm-config.h"
>  #include "llvm/Support/thread.h"
>
> @@ -35,7 +36,7 @@ namespace llvm {
>  /// for some work to become available.
>  class ThreadPool {
>  public:
> -  using TaskTy = std::function<void()>;
> +  using TaskTy = unique_function<void()>;
>    using PackagedTaskTy = std::packaged_task<void()>;
>
>    /// Construct a pool with the number of threads found by
>
> Modified: llvm/trunk/lib/ExecutionEngine/Orc/LLJIT.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Orc/LLJIT.cpp?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/Orc/LLJIT.cpp (original)
> +++ llvm/trunk/lib/ExecutionEngine/Orc/LLJIT.cpp Fri Sep 13 04:35:33 2019
> @@ -132,9 +132,7 @@ LLJIT::LLJIT(LLJITBuilderState &S, Error
>      CompileThreads = std::make_unique<ThreadPool>(S.NumCompileThreads);
>      ES->setDispatchMaterialization(
>          [this](JITDylib &JD, std::unique_ptr<MaterializationUnit> MU) {
> -          // FIXME: Switch to move capture once we have c++14.
> -          auto SharedMU =
> std::shared_ptr<MaterializationUnit>(std::move(MU));
> -          auto Work = [SharedMU, &JD]() { SharedMU->doMaterialize(JD); };
> +          auto Work = [MU = std::move(MU), &JD] { MU->doMaterialize(JD);
> };
>            CompileThreads->async(std::move(Work));
>          });
>    }
>
> Modified: llvm/trunk/lib/ExecutionEngine/Orc/Legacy.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Orc/Legacy.cpp?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/Orc/Legacy.cpp (original)
> +++ llvm/trunk/lib/ExecutionEngine/Orc/Legacy.cpp Fri Sep 13 04:35:33 2019
> @@ -23,7 +23,8 @@ void JITSymbolResolverAdapter::lookup(co
>    for (auto &S : Symbols)
>      InternedSymbols.insert(ES.intern(S));
>
> -  auto OnResolvedWithUnwrap = [OnResolved](Expected<SymbolMap>
> InternedResult) {
> +  auto OnResolvedWithUnwrap = [OnResolved = std::move(OnResolved)](
> +                                  Expected<SymbolMap> InternedResult)
> mutable {
>      if (!InternedResult) {
>        OnResolved(InternedResult.takeError());
>        return;
> @@ -36,7 +37,7 @@ void JITSymbolResolverAdapter::lookup(co
>    };
>
>    auto Q = std::make_shared<AsynchronousSymbolQuery>(
> -      InternedSymbols, SymbolState::Resolved, OnResolvedWithUnwrap);
> +      InternedSymbols, SymbolState::Resolved,
> std::move(OnResolvedWithUnwrap));
>
>    auto Unresolved = R.lookup(Q, InternedSymbols);
>    if (Unresolved.empty()) {
>
> Modified: llvm/trunk/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp
> (original)
> +++ llvm/trunk/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp Fri
> Sep 13 04:35:33 2019
> @@ -27,9 +27,9 @@ public:
>
>      // Build an OnResolve callback to unwrap the interned strings and
> pass them
>      // to the OnResolved callback.
> -    // FIXME: Switch to move capture of OnResolved once we have c++14.
>      auto OnResolvedWithUnwrap =
> -        [OnResolved](Expected<SymbolMap> InternedResult) {
> +        [OnResolved = std::move(OnResolved)](
> +            Expected<SymbolMap> InternedResult) mutable {
>            if (!InternedResult) {
>              OnResolved(InternedResult.takeError());
>              return;
> @@ -50,7 +50,7 @@ public:
>      MR.getTargetJITDylib().withSearchOrderDo(
>          [&](const JITDylibSearchList &JDs) { SearchOrder = JDs; });
>      ES.lookup(SearchOrder, InternedSymbols, SymbolState::Resolved,
> -              OnResolvedWithUnwrap, RegisterDependencies);
> +              std::move(OnResolvedWithUnwrap), RegisterDependencies);
>    }
>
>    Expected<LookupSet> getResponsibilitySet(const LookupSet &Symbols) {
> @@ -133,8 +133,6 @@ void RTDyldObjectLinkingLayer::emit(Mate
>
>    JITDylibSearchOrderResolver Resolver(*SharedR);
>
> -  // FIXME: Switch to move-capture for the 'O' buffer once we have c++14.
> -  MemoryBuffer *UnownedObjBuffer = O.release();
>    jitLinkForORC(
>        **Obj, std::move(O), *MemMgr, Resolver, ProcessAllSections,
>        [this, K, SharedR, &Obj, InternalSymbols](
> @@ -143,9 +141,8 @@ void RTDyldObjectLinkingLayer::emit(Mate
>          return onObjLoad(K, *SharedR, **Obj, std::move(LoadedObjInfo),
>                           ResolvedSymbols, *InternalSymbols);
>        },
> -      [this, K, SharedR, UnownedObjBuffer](Error Err) {
> -        std::unique_ptr<MemoryBuffer> ObjBuffer(UnownedObjBuffer);
> -        onObjEmit(K, std::move(ObjBuffer), *SharedR, std::move(Err));
> +      [this, K, SharedR, O = std::move(O)](Error Err) mutable {
> +        onObjEmit(K, std::move(O), *SharedR, std::move(Err));
>        });
>  }
>
>
> Modified: llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp (original)
> +++ llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp Fri Sep 13
> 04:35:33 2019
> @@ -1180,17 +1180,15 @@ Error RuntimeDyldImpl::resolveExternalSy
>  }
>
>  void RuntimeDyldImpl::finalizeAsync(
> -    std::unique_ptr<RuntimeDyldImpl> This, std::function<void(Error)>
> OnEmitted,
> +    std::unique_ptr<RuntimeDyldImpl> This,
> +    unique_function<void(Error)> OnEmitted,
>      std::unique_ptr<MemoryBuffer> UnderlyingBuffer) {
>
> -  // FIXME: Move-capture OnRelocsApplied and UnderlyingBuffer once we have
> -  // c++14.
> -  auto SharedUnderlyingBuffer =
> -      std::shared_ptr<MemoryBuffer>(std::move(UnderlyingBuffer));
>    auto SharedThis = std::shared_ptr<RuntimeDyldImpl>(std::move(This));
>    auto PostResolveContinuation =
> -      [SharedThis, OnEmitted, SharedUnderlyingBuffer](
> -          Expected<JITSymbolResolver::LookupResult> Result) {
> +      [SharedThis, OnEmitted = std::move(OnEmitted),
> +       UnderlyingBuffer = std::move(UnderlyingBuffer)](
> +          Expected<JITSymbolResolver::LookupResult> Result) mutable {
>          if (!Result) {
>            OnEmitted(Result.takeError());
>            return;
> @@ -1224,7 +1222,7 @@ void RuntimeDyldImpl::finalizeAsync(
>    }
>
>    if (!Symbols.empty()) {
> -    SharedThis->Resolver.lookup(Symbols, PostResolveContinuation);
> +    SharedThis->Resolver.lookup(Symbols,
> std::move(PostResolveContinuation));
>    } else
>      PostResolveContinuation(std::map<StringRef, JITEvaluatedSymbol>());
>  }
> @@ -1400,11 +1398,11 @@ void jitLinkForORC(object::ObjectFile &O
>                     std::unique_ptr<MemoryBuffer> UnderlyingBuffer,
>                     RuntimeDyld::MemoryManager &MemMgr,
>                     JITSymbolResolver &Resolver, bool ProcessAllSections,
> -                   std::function<Error(
> +                   unique_function<Error(
>                         std::unique_ptr<RuntimeDyld::LoadedObjectInfo>
> LoadedObj,
>                         std::map<StringRef, JITEvaluatedSymbol>)>
>                         OnLoaded,
> -                   std::function<void(Error)> OnEmitted) {
> +                   unique_function<void(Error)> OnEmitted) {
>
>    RuntimeDyld RTDyld(MemMgr, Resolver);
>    RTDyld.setProcessAllSections(ProcessAllSections);
>
> Modified: llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h (original)
> +++ llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h Fri Sep
> 13 04:35:33 2019
> @@ -549,7 +549,7 @@ public:
>    void resolveLocalRelocations();
>
>    static void finalizeAsync(std::unique_ptr<RuntimeDyldImpl> This,
> -                            std::function<void(Error)> OnEmitted,
> +                            unique_function<void(Error)> OnEmitted,
>                              std::unique_ptr<MemoryBuffer>
> UnderlyingBuffer);
>
>    void reassignSectionAddress(unsigned SectionID, uint64_t Addr);
>
> Modified: llvm/trunk/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp?rev=371843&r1=371842&r2=371843&view=diff
>
> ==============================================================================
> --- llvm/trunk/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp (original)
> +++ llvm/trunk/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp Fri Sep 13
> 04:35:33 2019
> @@ -1102,9 +1102,8 @@ TEST_F(CoreAPIsStandardTest, TestLookupW
>    std::thread MaterializationThread;
>    ES.setDispatchMaterialization(
>        [&](JITDylib &JD, std::unique_ptr<MaterializationUnit> MU) {
> -        auto SharedMU =
> std::shared_ptr<MaterializationUnit>(std::move(MU));
>          MaterializationThread =
> -            std::thread([SharedMU, &JD]() { SharedMU->doMaterialize(JD);
> });
> +            std::thread([MU = std::move(MU), &JD] {
> MU->doMaterialize(JD); });
>        });
>
>    cantFail(JD.define(absoluteSymbols({{Foo, FooSym}})));
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190916/bec8c16d/attachment.html>


More information about the llvm-commits mailing list