mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
[ExecutionEngine] FindFunctionNamed: Skip declarations
Summary: Basically all other methods that look up functions by name skip them if they are mere declarations. Do the same in FindFunctionNamed. Reviewers: lhames Reviewed By: lhames Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D7068 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@227227 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
47b633d4a5
commit
99b52293c7
@ -142,7 +142,8 @@ bool ExecutionEngine::removeModule(Module *M) {
|
|||||||
|
|
||||||
Function *ExecutionEngine::FindFunctionNamed(const char *FnName) {
|
Function *ExecutionEngine::FindFunctionNamed(const char *FnName) {
|
||||||
for (unsigned i = 0, e = Modules.size(); i != e; ++i) {
|
for (unsigned i = 0, e = Modules.size(); i != e; ++i) {
|
||||||
if (Function *F = Modules[i]->getFunction(FnName))
|
Function *F = Modules[i]->getFunction(FnName);
|
||||||
|
if (F && !F->isDeclaration())
|
||||||
return F;
|
return F;
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -408,7 +408,8 @@ Function *MCJIT::FindFunctionNamedInModulePtrSet(const char *FnName,
|
|||||||
ModulePtrSet::iterator I,
|
ModulePtrSet::iterator I,
|
||||||
ModulePtrSet::iterator E) {
|
ModulePtrSet::iterator E) {
|
||||||
for (; I != E; ++I) {
|
for (; I != E; ++I) {
|
||||||
if (Function *F = (*I)->getFunction(FnName))
|
Function *F = (*I)->getFunction(FnName);
|
||||||
|
if (F && !F->isDeclaration())
|
||||||
return F;
|
return F;
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -392,4 +392,23 @@ TEST_F(MCJITMultipleModuleTest, cross_module_dependency_case3) {
|
|||||||
ptr = TheJIT->getFunctionAddress(FB2->getName().str());
|
ptr = TheJIT->getFunctionAddress(FB2->getName().str());
|
||||||
checkAccumulate(ptr);
|
checkAccumulate(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test that FindFunctionNamed finds the definition of
|
||||||
|
// a function in the correct module. We check two functions
|
||||||
|
// in two different modules, to make sure that for at least
|
||||||
|
// one of them MCJIT had to ignore the extern declaration.
|
||||||
|
TEST_F(MCJITMultipleModuleTest, FindFunctionNamed_test) {
|
||||||
|
SKIP_UNSUPPORTED_PLATFORM;
|
||||||
|
|
||||||
|
std::unique_ptr<Module> A, B;
|
||||||
|
Function *FA, *FB1, *FB2;
|
||||||
|
createCrossModuleRecursiveCase(A, FA, B, FB1, FB2);
|
||||||
|
|
||||||
|
createJIT(std::move(A));
|
||||||
|
TheJIT->addModule(std::move(B));
|
||||||
|
|
||||||
|
EXPECT_EQ(FA, TheJIT->FindFunctionNamed(FA->getName().data()));
|
||||||
|
EXPECT_EQ(FB1, TheJIT->FindFunctionNamed(FB1->getName().data()));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user