OSDN Git Service

[ORC] Add unit test for HasMaterializationSideEffectsOnly failure behavior.
authorLang Hames <lhames@gmail.com>
Tue, 1 Sep 2020 19:10:23 +0000 (12:10 -0700)
committerLang Hames <lhames@gmail.com>
Tue, 1 Sep 2020 19:34:34 +0000 (12:34 -0700)
llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp

index 5a83e6a..2c008df 100644 (file)
@@ -110,7 +110,7 @@ TEST_F(CoreAPIsStandardTest, ResolveUnrequestedSymbol) {
   EXPECT_TRUE(Result.count(Foo)) << "Expected result for \"Foo\"";
 }
 
-TEST_F(CoreAPIsStandardTest, MaterializationSideEffctsOnlyTest) {
+TEST_F(CoreAPIsStandardTest, MaterializationSideEffctsOnlyBasic) {
   // Test that basic materialization-side-effects-only symbols work as expected:
   // that they can be emitted without being resolved, that queries for them
   // don't return until they're emitted, and that they don't appear in query
@@ -147,6 +147,24 @@ TEST_F(CoreAPIsStandardTest, MaterializationSideEffctsOnlyTest) {
   EXPECT_TRUE(Result->empty()) << "Lookup result contained unexpected value";
 }
 
+TEST_F(CoreAPIsStandardTest, MaterializationSideEffectsOnlyFailuresPersist) {
+  // Test that when a MaterializationSideEffectsOnly symbol is failed it
+  // remains in the failure state rather than vanishing.
+
+  cantFail(JD.define(std::make_unique<SimpleMaterializationUnit>(
+      SymbolFlagsMap(
+          {{Foo, JITSymbolFlags::Exported |
+                     JITSymbolFlags::MaterializationSideEffectsOnly}}),
+      [&](MaterializationResponsibility R) { R.failMaterialization(); })));
+
+  EXPECT_THAT_EXPECTED(
+      ES.lookup(makeJITDylibSearchOrder(&JD), SymbolLookupSet({Foo})),
+      Failed());
+  EXPECT_THAT_EXPECTED(
+      ES.lookup(makeJITDylibSearchOrder(&JD), SymbolLookupSet({Foo})),
+      Failed());
+}
+
 TEST_F(CoreAPIsStandardTest, RemoveSymbolsTest) {
   // Test that:
   // (1) Missing symbols generate a SymbolsNotFound error.