aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/ExecutionEngine/Orc/IRCompileLayer.h')
-rw-r--r--include/llvm/ExecutionEngine/Orc/IRCompileLayer.h31
1 files changed, 16 insertions, 15 deletions
diff --git a/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h b/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
index e4bed95fdabf..e6ce18a42b8b 100644
--- a/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
+++ b/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
@@ -37,9 +37,6 @@ public:
private:
typedef typename BaseLayerT::ObjSetHandleT ObjSetHandleT;
- typedef std::vector<std::unique_ptr<object::ObjectFile>> OwningObjectVec;
- typedef std::vector<std::unique_ptr<MemoryBuffer>> OwningBufferVec;
-
public:
/// @brief Handle to a set of compiled modules.
typedef ObjSetHandleT ModuleSetHandleT;
@@ -62,28 +59,29 @@ public:
ModuleSetHandleT addModuleSet(ModuleSetT Ms,
MemoryManagerPtrT MemMgr,
SymbolResolverPtrT Resolver) {
- OwningObjectVec Objects;
- OwningBufferVec Buffers;
+ std::vector<std::unique_ptr<object::OwningBinary<object::ObjectFile>>>
+ Objects;
for (const auto &M : Ms) {
- std::unique_ptr<object::ObjectFile> Object;
- std::unique_ptr<MemoryBuffer> Buffer;
+ auto Object =
+ llvm::make_unique<object::OwningBinary<object::ObjectFile>>();
if (ObjCache)
- std::tie(Object, Buffer) = tryToLoadFromObjectCache(*M).takeBinary();
+ *Object = tryToLoadFromObjectCache(*M);
- if (!Object) {
- std::tie(Object, Buffer) = Compile(*M).takeBinary();
+ if (!Object->getBinary()) {
+ *Object = Compile(*M);
if (ObjCache)
- ObjCache->notifyObjectCompiled(&*M, Buffer->getMemBufferRef());
+ ObjCache->notifyObjectCompiled(&*M,
+ Object->getBinary()->getMemoryBufferRef());
}
Objects.push_back(std::move(Object));
- Buffers.push_back(std::move(Buffer));
}
ModuleSetHandleT H =
- BaseLayer.addObjectSet(Objects, std::move(MemMgr), std::move(Resolver));
+ BaseLayer.addObjectSet(std::move(Objects), std::move(MemMgr),
+ std::move(Resolver));
return H;
}
@@ -126,10 +124,13 @@ private:
if (!ObjBuffer)
return object::OwningBinary<object::ObjectFile>();
- ErrorOr<std::unique_ptr<object::ObjectFile>> Obj =
+ Expected<std::unique_ptr<object::ObjectFile>> Obj =
object::ObjectFile::createObjectFile(ObjBuffer->getMemBufferRef());
- if (!Obj)
+ if (!Obj) {
+ // TODO: Actually report errors helpfully.
+ consumeError(Obj.takeError());
return object::OwningBinary<object::ObjectFile>();
+ }
return object::OwningBinary<object::ObjectFile>(std::move(*Obj),
std::move(ObjBuffer));