summaryrefslogtreecommitdiff
path: root/llvm/unittests/ExecutionEngine/Orc/ThreadSafeModuleTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/ExecutionEngine/Orc/ThreadSafeModuleTest.cpp')
-rw-r--r--llvm/unittests/ExecutionEngine/Orc/ThreadSafeModuleTest.cpp28
1 files changed, 24 insertions, 4 deletions
diff --git a/llvm/unittests/ExecutionEngine/Orc/ThreadSafeModuleTest.cpp b/llvm/unittests/ExecutionEngine/Orc/ThreadSafeModuleTest.cpp
index bbb9e8d3d6a7..7db561ce84f7 100644
--- a/llvm/unittests/ExecutionEngine/Orc/ThreadSafeModuleTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/ThreadSafeModuleTest.cpp
@@ -31,15 +31,21 @@ const llvm::StringRef FooSrc = R"(
}
)";
-static ThreadSafeModule parseModule(llvm::StringRef Source,
- llvm::StringRef Name) {
- auto Ctx = std::make_unique<LLVMContext>();
+static std::unique_ptr<Module>
+parseModuleRaw(llvm::StringRef Source, llvm::StringRef Name, LLVMContext &Ctx) {
SMDiagnostic Err;
- auto M = parseIR(MemoryBufferRef(Source, Name), Err, *Ctx);
+ auto M = parseIR(MemoryBufferRef(Source, Name), Err, Ctx);
if (!M) {
Err.print("Testcase source failed to parse: ", errs());
exit(1);
}
+ return M;
+}
+
+static ThreadSafeModule parseModule(llvm::StringRef Source,
+ llvm::StringRef Name) {
+ auto Ctx = std::make_unique<LLVMContext>();
+ auto M = parseModuleRaw(Source, Name, *Ctx);
return ThreadSafeModule(std::move(M), std::move(Ctx));
}
@@ -128,6 +134,20 @@ TEST(ThreadSafeModuleTest, ConsumingModuleDo) {
TSM.consumingModuleDo([](std::unique_ptr<Module> M) {});
}
+TEST(ThreadSafeModuleTest, CloneExternalModuleToNewContext) {
+ auto Ctx = std::make_unique<LLVMContext>();
+ auto M = parseModuleRaw(FooSrc, "foo.ll", *Ctx);
+ auto TSCtx = ThreadSafeContext(std::make_unique<LLVMContext>());
+ auto TSM = cloneExternalModuleToContext(*M, TSCtx);
+ TSM.withModuleDo([&](Module &NewM) {
+ EXPECT_NE(&NewM.getContext(), Ctx.get());
+ TSCtx.withContextDo(
+ [&](LLVMContext *NewCtx) { EXPECT_EQ(&NewM.getContext(), NewCtx); });
+ EXPECT_FALSE(NewM.empty());
+ EXPECT_FALSE(verifyModule(NewM, &errs()));
+ });
+}
+
TEST(ThreadSafeModuleTest, CloneToNewContext) {
auto TSM1 = parseModule(FooSrc, "foo.ll");
auto TSM2 = cloneToNewContext(TSM1);