summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp')
-rw-r--r--llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
index 729dad9c29a..60612f6c6a7 100644
--- a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp
@@ -935,7 +935,7 @@ TEST_F(CoreAPIsStandardTest, FailResolution) {
}
}
-TEST_F(CoreAPIsStandardTest, FailEmissionEarly) {
+TEST_F(CoreAPIsStandardTest, FailEmissionAfterResolution) {
cantFail(JD.define(absoluteSymbols({{Baz, BazSym}})));
@@ -970,6 +970,30 @@ TEST_F(CoreAPIsStandardTest, FailEmissionEarly) {
<< "Unexpected success while trying to test error propagation";
}
+TEST_F(CoreAPIsStandardTest, FailAfterPartialResolution) {
+
+ cantFail(JD.define(absoluteSymbols({{Foo, FooSym}})));
+
+ // Fail materialization of bar.
+ auto BarMU = std::make_unique<SimpleMaterializationUnit>(
+ SymbolFlagsMap({{Bar, BarSym.getFlags()}}),
+ [&](MaterializationResponsibility R) { R.failMaterialization(); });
+
+ cantFail(JD.define(std::move(BarMU)));
+
+ bool QueryHandlerRun = false;
+ ES.lookup(
+ JITDylibSearchList({{&JD, false}}), SymbolNameSet({Foo, Bar}),
+ SymbolState::Resolved,
+ [&](Expected<SymbolMap> Result) {
+ EXPECT_THAT_EXPECTED(std::move(Result), Failed())
+ << "Expected query to fail";
+ QueryHandlerRun = true;
+ },
+ NoDependenciesToRegister);
+ EXPECT_TRUE(QueryHandlerRun) << "Query handler never ran";
+}
+
TEST_F(CoreAPIsStandardTest, TestLookupWithUnthreadedMaterialization) {
auto MU = std::make_unique<SimpleMaterializationUnit>(
SymbolFlagsMap({{Foo, JITSymbolFlags::Exported}}),
OpenPOWER on IntegriCloud