diff options
author | Lang Hames <lhames@gmail.com> | 2018-09-25 19:48:46 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2018-09-25 19:48:46 +0000 |
commit | adde5ba4b20225e2cad18e22705bb434217666c1 (patch) | |
tree | 9efd8a8797c49826eca783ce3b80d83cfebce38e /llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp | |
parent | 721da4bd87f1bd22fb96549da1acab41081ddbbc (diff) | |
download | bcm5719-llvm-adde5ba4b20225e2cad18e22705bb434217666c1.tar.gz bcm5719-llvm-adde5ba4b20225e2cad18e22705bb434217666c1.zip |
[ORC] Reapply r342939 with a fix for MSVC's promise/future restrictions.
llvm-svn: 343012
Diffstat (limited to 'llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp')
-rw-r--r-- | llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp index d865216cf31..b6ef8ad9675 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/JITSymbol.cpp @@ -62,34 +62,42 @@ llvm::ARMJITSymbolFlags::fromObjectSymbol(const object::SymbolRef &Symbol) { /// Performs lookup by, for each symbol, first calling /// findSymbolInLogicalDylib and if that fails calling /// findSymbol. -Expected<JITSymbolResolver::LookupResult> -LegacyJITSymbolResolver::lookup(const LookupSet &Symbols) { +void LegacyJITSymbolResolver::lookup(const LookupSet &Symbols, + OnResolvedFunction OnResolved) { JITSymbolResolver::LookupResult Result; for (auto &Symbol : Symbols) { std::string SymName = Symbol.str(); if (auto Sym = findSymbolInLogicalDylib(SymName)) { if (auto AddrOrErr = Sym.getAddress()) Result[Symbol] = JITEvaluatedSymbol(*AddrOrErr, Sym.getFlags()); - else - return AddrOrErr.takeError(); - } else if (auto Err = Sym.takeError()) - return std::move(Err); - else { + else { + OnResolved(AddrOrErr.takeError()); + return; + } + } else if (auto Err = Sym.takeError()) { + OnResolved(std::move(Err)); + return; + } else { // findSymbolInLogicalDylib failed. Lets try findSymbol. if (auto Sym = findSymbol(SymName)) { if (auto AddrOrErr = Sym.getAddress()) Result[Symbol] = JITEvaluatedSymbol(*AddrOrErr, Sym.getFlags()); - else - return AddrOrErr.takeError(); - } else if (auto Err = Sym.takeError()) - return std::move(Err); - else - return make_error<StringError>("Symbol not found: " + Symbol, - inconvertibleErrorCode()); + else { + OnResolved(AddrOrErr.takeError()); + return; + } + } else if (auto Err = Sym.takeError()) { + OnResolved(std::move(Err)); + return; + } else { + OnResolved(make_error<StringError>("Symbol not found: " + Symbol, + inconvertibleErrorCode())); + return; + } } } - return std::move(Result); + OnResolved(std::move(Result)); } /// Performs flags lookup by calling findSymbolInLogicalDylib and |