diff options
Diffstat (limited to 'llvm/unittests/ExecutionEngine/Orc/ThreadSafeModuleTest.cpp')
| -rw-r--r-- | llvm/unittests/ExecutionEngine/Orc/ThreadSafeModuleTest.cpp | 28 |
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); |
