diff options
| author | Lang Hames <lhames@gmail.com> | 2018-07-10 23:34:56 +0000 |
|---|---|---|
| committer | Lang Hames <lhames@gmail.com> | 2018-07-10 23:34:56 +0000 |
| commit | a3c473e650f538a93b66187ac02980dd6ab1ab45 (patch) | |
| tree | c7e56411d9f475dfc8bb4594eaacee936fa3b4c7 /llvm/unittests | |
| parent | db5c9aa3664ceb6b01d8ba2627c22d0b6bf3ee97 (diff) | |
| download | bcm5719-llvm-a3c473e650f538a93b66187ac02980dd6ab1ab45.tar.gz bcm5719-llvm-a3c473e650f538a93b66187ac02980dd6ab1ab45.zip | |
[ORC] Generalize alias materialization to support re-exports (i.e. aliasing of
symbols in another VSO).
Also fixes a bug where chained aliases within a single VSO would deadlock on
materialization.
llvm-svn: 336741
Diffstat (limited to 'llvm/unittests')
| -rw-r--r-- | llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp index 7c4eccce741..6c98b51fa74 100644 --- a/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp +++ b/llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp @@ -259,7 +259,7 @@ TEST(CoreAPIsTest, LookupFlagsTest) { EXPECT_EQ(SymbolFlags[Bar], BarFlags) << "Incorrect flags returned for Bar"; } -TEST(CoreAPIsTest, TestAliases) { +TEST(CoreAPIsTest, TestBasicAliases) { ExecutionSession ES; auto &V = ES.createVSO("V"); @@ -288,6 +288,31 @@ TEST(CoreAPIsTest, TestAliases) { << "The \"Qux\" alias should have been overriden"; } +TEST(CoreAPIsTest, TestChainedAliases) { + ExecutionSession ES; + auto &V = ES.createVSO("V"); + + auto Foo = ES.getSymbolStringPool().intern("foo"); + auto FooSym = JITEvaluatedSymbol(1U, JITSymbolFlags::Exported); + + auto Bar = ES.getSymbolStringPool().intern("bar"); + + auto Baz = ES.getSymbolStringPool().intern("baz"); + + cantFail(V.define(absoluteSymbols({{Foo, FooSym}}))); + cantFail(V.define(symbolAliases({{Baz, {Bar, JITSymbolFlags::Exported}}, + {Bar, {Foo, JITSymbolFlags::Exported}}}))); + + auto Result = lookup({&V}, {Bar, Baz}); + EXPECT_TRUE(!!Result) << "Unexpected lookup failure"; + EXPECT_EQ(Result->count(Bar), 1U) << "No result for \"bar\""; + EXPECT_EQ(Result->count(Baz), 1U) << "No result for \"baz\""; + EXPECT_EQ((*Result)[Bar].getAddress(), FooSym.getAddress()) + << "\"Bar\"'s address should match \"Foo\"'s"; + EXPECT_EQ((*Result)[Baz].getAddress(), FooSym.getAddress()) + << "\"Baz\"'s address should match \"Foo\"'s"; +} + TEST(CoreAPIsTest, TestTrivialCircularDependency) { ExecutionSession ES; |

