mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-27 13:30:05 +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) {
|
||||
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 nullptr;
|
||||
|
@ -408,7 +408,8 @@ Function *MCJIT::FindFunctionNamedInModulePtrSet(const char *FnName,
|
||||
ModulePtrSet::iterator I,
|
||||
ModulePtrSet::iterator E) {
|
||||
for (; I != E; ++I) {
|
||||
if (Function *F = (*I)->getFunction(FnName))
|
||||
Function *F = (*I)->getFunction(FnName);
|
||||
if (F && !F->isDeclaration())
|
||||
return F;
|
||||
}
|
||||
return nullptr;
|
||||
|
@ -392,4 +392,23 @@ TEST_F(MCJITMultipleModuleTest, cross_module_dependency_case3) {
|
||||
ptr = TheJIT->getFunctionAddress(FB2->getName().str());
|
||||
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