diff options
| author | Lang Hames <lhames@gmail.com> | 2018-07-02 22:30:18 +0000 |
|---|---|---|
| committer | Lang Hames <lhames@gmail.com> | 2018-07-02 22:30:18 +0000 |
| commit | adae9bfa243713a781ecad6e07759e57dc2c7f52 (patch) | |
| tree | 22a5695b8cf1a1ecc028edcdccc66fd173895afa /llvm/lib/ExecutionEngine | |
| parent | 9f02a94dad81f6f2adb775a1b34c9c30e2b9887f (diff) | |
| download | bcm5719-llvm-adae9bfa243713a781ecad6e07759e57dc2c7f52.tar.gz bcm5719-llvm-adae9bfa243713a781ecad6e07759e57dc2c7f52.zip | |
[ORC] Verify modules when running LLLazyJIT in LLI, and deal with fallout.
The verifier identified several modules that were broken due to incorrect
linkage on declarations. To fix this, CompileOnDemandLayer2::extractFunction
has been updated to change decls to external linkage.
llvm-svn: 336150
Diffstat (limited to 'llvm/lib/ExecutionEngine')
| -rw-r--r-- | llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp b/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp index 27a4ad68f59..f7ff40cf802 100644 --- a/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp +++ b/llvm/lib/ExecutionEngine/Orc/CompileOnDemandLayer.cpp @@ -322,11 +322,15 @@ std::unique_ptr<Module> CompileOnDemandLayer2::extractFunctions( ValueToValueMapTy VMap; auto Materializer = createLambdaValueMaterializer([&](Value *V) -> Value * { + GlobalValue *NewGV = nullptr; if (auto *F = dyn_cast<Function>(V)) - return cloneFunctionDecl(*ExtractedFunctionsModule, *F); + NewGV = cloneFunctionDecl(*ExtractedFunctionsModule, *F); else if (auto *GV = dyn_cast<GlobalVariable>(V)) - return cloneGlobalVariableDecl(*ExtractedFunctionsModule, *GV); - return nullptr; + NewGV = cloneGlobalVariableDecl(*ExtractedFunctionsModule, *GV); + + if (NewGV) + NewGV->setLinkage(GlobalValue::ExternalLinkage); + return NewGV; }); std::vector<std::pair<Function *, Function *>> OrigToNew; |

