1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00

[ORC] Add unit tests for the reexports utility that were left out of r336741,

and fix a bug that these exposed.

llvm-svn: 336760
This commit is contained in:
Lang Hames 2018-07-11 04:39:11 +00:00
parent eb883aa8d1
commit 342118b779
2 changed files with 43 additions and 1 deletions

View File

@ -462,7 +462,7 @@ void ReExportsMaterializationUnit::materialize(
// FIXME: We're creating a SymbolFlagsMap and a std::map of // FIXME: We're creating a SymbolFlagsMap and a std::map of
// std::sets just to add one dependency here. This needs a // std::sets just to add one dependency here. This needs a
// re-think. // re-think.
Resolved.insert(KV.first); Resolved.insert(KV.second.Aliasee);
} }
QueryInfo->R.resolve(ResolutionMap); QueryInfo->R.resolve(ResolutionMap);

View File

@ -300,6 +300,48 @@ TEST_F(CoreAPIsStandardTest, TestChainedAliases) {
<< "\"Baz\"'s address should match \"Foo\"'s"; << "\"Baz\"'s address should match \"Foo\"'s";
} }
TEST_F(CoreAPIsStandardTest, TestBasicReExports) {
// Test that the basic use case of re-exporting a single symbol from another
// VSO works.
cantFail(V.define(absoluteSymbols({{Foo, FooSym}})));
auto &V2 = ES.createVSO("V2");
cantFail(V2.define(reexports(V, {{Bar, {Foo, BarSym.getFlags()}}})));
auto Result = cantFail(lookup({&V2}, Bar));
EXPECT_EQ(Result.getAddress(), FooSym.getAddress())
<< "Re-export Bar for symbol Foo should match FooSym's address";
}
TEST_F(CoreAPIsStandardTest, TestThatReExportsDontUnnecessarilyMaterialize) {
// Test that re-exports do not materialize symbols that have not been queried
// for.
cantFail(V.define(absoluteSymbols({{Foo, FooSym}})));
bool BarMaterialized = false;
auto BarMU = llvm::make_unique<SimpleMaterializationUnit>(
SymbolFlagsMap({{Bar, BarSym.getFlags()}}),
[&](MaterializationResponsibility R) {
BarMaterialized = true;
R.resolve({{Bar, BarSym}});
R.finalize();
});
cantFail(V.define(BarMU));
auto &V2 = ES.createVSO("V2");
cantFail(V2.define(reexports(
V, {{Baz, {Foo, BazSym.getFlags()}}, {Qux, {Bar, QuxSym.getFlags()}}})));
auto Result = cantFail(lookup({&V2}, Baz));
EXPECT_EQ(Result.getAddress(), FooSym.getAddress())
<< "Re-export Baz for symbol Foo should match FooSym's address";
EXPECT_FALSE(BarMaterialized) << "Bar should not have been materialized";
}
TEST_F(CoreAPIsStandardTest, TestTrivialCircularDependency) { TEST_F(CoreAPIsStandardTest, TestTrivialCircularDependency) {
Optional<MaterializationResponsibility> FooR; Optional<MaterializationResponsibility> FooR;
auto FooMU = llvm::make_unique<SimpleMaterializationUnit>( auto FooMU = llvm::make_unique<SimpleMaterializationUnit>(