diff options
| author | Lang Hames <lhames@gmail.com> | 2018-06-17 16:59:53 +0000 |
|---|---|---|
| committer | Lang Hames <lhames@gmail.com> | 2018-06-17 16:59:53 +0000 |
| commit | df5776b1dc464a3afb920d72103a75c567d59cf6 (patch) | |
| tree | 11d8558e21eb33bc61988e642d84ad5e4795e85e /llvm/unittests | |
| parent | 11adecfb2ca7f97551aaa0df32507bf7c432ba18 (diff) | |
| download | bcm5719-llvm-df5776b1dc464a3afb920d72103a75c567d59cf6.tar.gz bcm5719-llvm-df5776b1dc464a3afb920d72103a75c567d59cf6.zip | |
[ORC] Erase empty dependence sets when adding new symbol dependencies.
llvm-svn: 334910
Diffstat (limited to 'llvm/unittests')
| -rw-r--r-- | llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp index 589cdb4d745..b809f34a37f 100644 --- a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp +++ b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp @@ -205,6 +205,44 @@ TEST(CoreAPIsTest, LookupFlagsTest) { EXPECT_EQ(SymbolFlags[Bar], BarFlags) << "Incorrect flags returned for Bar"; } +TEST(CoreAPIsTest, TestTrivialCircularDependency) { + ExecutionSession ES; + + auto &V = ES.createVSO("V"); + + auto Foo = ES.getSymbolStringPool().intern("foo"); + auto FooFlags = JITSymbolFlags::Exported; + auto FooSym = JITEvaluatedSymbol(1U, FooFlags); + + Optional<MaterializationResponsibility> FooR; + auto FooMU = llvm::make_unique<SimpleMaterializationUnit>( + SymbolFlagsMap({{Foo, FooFlags}}), + [&](MaterializationResponsibility R) { FooR.emplace(std::move(R)); }); + + cantFail(V.define(FooMU)); + + bool FooReady = false; + auto Q = + std::make_shared<AsynchronousSymbolQuery>( + SymbolNameSet({ Foo }), + [](Expected<AsynchronousSymbolQuery::ResolutionResult> R) { + cantFail(std::move(R)); + }, + [&](Error Err) { + cantFail(std::move(Err)); + FooReady = true; + }); + + V.lookup(std::move(Q), { Foo }); + + FooR->addDependencies({{&V, {Foo}}}); + FooR->resolve({{Foo, FooSym}}); + FooR->finalize(); + + EXPECT_TRUE(FooReady) + << "Self-dependency prevented symbol from being marked ready"; +} + TEST(CoreAPIsTest, TestCircularDependenceInOneVSO) { ExecutionSession ES; |

