summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp')
-rw-r--r--gnu/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/gnu/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp b/gnu/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp
index 5a4d6b4a225..d9448d47667 100644
--- a/gnu/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp
+++ b/gnu/llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp
@@ -8,6 +8,7 @@
//===----------------------------------------------------------------------===//
#include "OrcTestCommon.h"
+#include "llvm/ExecutionEngine/Orc/CompileUtils.h"
#include "llvm-c/Core.h"
#include "llvm-c/OrcBindings.h"
#include "llvm-c/Target.h"
@@ -37,6 +38,15 @@ protected:
return MB.takeModule();
}
+ std::shared_ptr<object::OwningBinary<object::ObjectFile>>
+ createTestObject() {
+ orc::SimpleCompiler IRCompiler(*TM);
+ auto M = createTestModule(TM->getTargetTriple());
+ M->setDataLayout(TM->createDataLayout());
+ return std::make_shared<object::OwningBinary<object::ObjectFile>>(
+ IRCompiler(*M));
+ }
+
typedef int (*MainFnTy)();
static int myTestFuncImpl() {
@@ -134,6 +144,36 @@ TEST_F(OrcCAPIExecutionTest, TestLazyIRCompilation) {
LLVMOrcDisposeInstance(JIT);
}
+TEST_F(OrcCAPIExecutionTest, TestAddObjectFile) {
+ if (!TM)
+ return;
+
+ std::unique_ptr<MemoryBuffer> ObjBuffer;
+ {
+ auto OwningObj = createTestObject();
+ auto ObjAndBuffer = OwningObj->takeBinary();
+ ObjBuffer = std::move(ObjAndBuffer.second);
+ }
+
+ LLVMOrcJITStackRef JIT =
+ LLVMOrcCreateInstance(wrap(TM.get()));
+ LLVMOrcGetMangledSymbol(JIT, &testFuncName, "testFunc");
+
+ LLVMOrcModuleHandle H;
+ LLVMOrcAddObjectFile(JIT, &H, wrap(ObjBuffer.release()), myResolver, nullptr);
+ LLVMOrcTargetAddress MainAddr;
+ LLVMOrcGetSymbolAddress(JIT, &MainAddr, "main");
+ MainFnTy MainFn = (MainFnTy)MainAddr;
+ int Result = MainFn();
+ EXPECT_EQ(Result, 42)
+ << "Lazily JIT'd code did not return expected result";
+
+ LLVMOrcRemoveModule(JIT, H);
+
+ LLVMOrcDisposeMangledSymbol(testFuncName);
+ LLVMOrcDisposeInstance(JIT);
+}
+
TEST_F(OrcCAPIExecutionTest, TestDirectCallbacksAPI) {
if (!TM)
return;