diff options
author | Lang Hames <lhames@gmail.com> | 2018-06-17 18:59:01 +0000 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2018-06-17 18:59:01 +0000 |
commit | a5247cc5c7a73f3e00c483e0ed36a683889d0ff2 (patch) | |
tree | 52d4a36d67791c99527bde44cd1bc4bd21724700 /llvm/unittests/ExecutionEngine | |
parent | 9fe45d846e0ce248cd3c785ffe9d99d479e06274 (diff) | |
download | bcm5719-llvm-a5247cc5c7a73f3e00c483e0ed36a683889d0ff2.tar.gz bcm5719-llvm-a5247cc5c7a73f3e00c483e0ed36a683889d0ff2.zip |
[ORC] Only notify queries that they are resolved/ready when the query state
changes.
This guards against redundant notifications.
llvm-svn: 334916
Diffstat (limited to 'llvm/unittests/ExecutionEngine')
-rw-r--r-- | llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp index b809f34a37f..6e6c7371e1d 100644 --- a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp +++ b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp @@ -163,6 +163,60 @@ TEST(CoreAPIsTest, SimpleAsynchronousSymbolQueryAgainstVSO) { EXPECT_TRUE(OnReadyRun) << "OnReady was not run"; } +TEST(CoreAPIsTest, EmptyVSOAndQueryLookup) { + ExecutionSession ES; + auto &V = ES.createVSO("V"); + + bool OnResolvedRun = false; + bool OnReadyRun = false; + + auto Q = std::make_shared<AsynchronousSymbolQuery>( + SymbolNameSet(), + [&](Expected<AsynchronousSymbolQuery::ResolutionResult> RR) { + cantFail(std::move(RR)); + OnResolvedRun = true; + }, + [&](Error Err) { + cantFail(std::move(Err)); + OnReadyRun = true; + }); + + V.lookup(std::move(Q), {}); + + EXPECT_TRUE(OnResolvedRun) << "OnResolved was not run for empty query"; + EXPECT_TRUE(OnReadyRun) << "OnReady was not run for empty query"; +} + +TEST(CoreAPIsTest, ChainedVSOLookup) { + ExecutionSession ES; + auto Foo = ES.getSymbolStringPool().intern("foo"); + auto FooSym = JITEvaluatedSymbol(1U, JITSymbolFlags::Exported); + + auto &V1 = ES.createVSO("V1"); + cantFail(V1.define(absoluteSymbols({{Foo, FooSym}}))); + + auto &V2 = ES.createVSO("V2"); + + bool OnResolvedRun = false; + bool OnReadyRun = false; + + auto Q = std::make_shared<AsynchronousSymbolQuery>( + SymbolNameSet({Foo}), + [&](Expected<AsynchronousSymbolQuery::ResolutionResult> RR) { + cantFail(std::move(RR)); + OnResolvedRun = true; + }, + [&](Error Err) { + cantFail(std::move(Err)); + OnReadyRun = true; + }); + + V2.lookup(Q, V1.lookup(Q, {Foo})); + + EXPECT_TRUE(OnResolvedRun) << "OnResolved was not run for empty query"; + EXPECT_TRUE(OnReadyRun) << "OnReady was not run for empty query"; +} + TEST(CoreAPIsTest, LookupFlagsTest) { // Test that lookupFlags works on a predefined symbol, and does not trigger |