diff options
| author | Lang Hames <lhames@gmail.com> | 2015-04-29 01:33:35 +0000 |
|---|---|---|
| committer | Lang Hames <lhames@gmail.com> | 2015-04-29 01:33:35 +0000 |
| commit | f3a8362bf28b80573e4ca27aa5e9f81817c4dd4f (patch) | |
| tree | 906157734e1b4cedf0c77f46eb46b9601e4e7a5c /llvm | |
| parent | f15fb032efeb9da81f3ca341879b3eccea98b1b6 (diff) | |
| download | bcm5719-llvm-f3a8362bf28b80573e4ca27aa5e9f81817c4dd4f.tar.gz bcm5719-llvm-f3a8362bf28b80573e4ca27aa5e9f81817c4dd4f.zip | |
[Orc] It's not valid to pass a null resolver to addModuleSet. Use a no-op
resolver with a diagnostic instread.
llvm-svn: 236074
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h b/llvm/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h index 7b4f611393f..13ba125e80b 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h @@ -15,6 +15,7 @@ #define LLVM_EXECUTIONENGINE_ORC_INDIRECTIONUTILS_H #include "JITSymbol.h" +#include "LambdaResolver.h" #include "llvm/ADT/DenseSet.h" #include "llvm/ExecutionEngine/RuntimeDyld.h" #include "llvm/IR/IRBuilder.h" @@ -159,9 +160,16 @@ private: std::unique_ptr<Module> M(new Module("resolver_block_module", Context)); TargetT::insertResolverBlock(*M, *this); + auto NonResolver = + createLambdaResolver( + [](const std::string &Name) -> RuntimeDyld::SymbolInfo { + llvm_unreachable("External symbols in resolver block?"); + }, + [](const std::string &Name) -> RuntimeDyld::SymbolInfo { + llvm_unreachable("Dylib symbols in resolver block?"); + }); auto H = JIT.addModuleSet(SingletonSet(std::move(M)), &MemMgr, - static_cast<RuntimeDyld::SymbolResolver*>( - nullptr)); + std::move(NonResolver)); JIT.emitAndFinalize(H); auto ResolverBlockSymbol = JIT.findSymbolIn(H, TargetT::ResolverBlockName, false); @@ -186,9 +194,16 @@ private: TargetT::insertCompileCallbackTrampolines(*M, ResolverBlockAddr, this->NumTrampolinesPerBlock, this->ActiveTrampolines.size()); + auto NonResolver = + createLambdaResolver( + [](const std::string &Name) -> RuntimeDyld::SymbolInfo { + llvm_unreachable("External symbols in trampoline block?"); + }, + [](const std::string &Name) -> RuntimeDyld::SymbolInfo { + llvm_unreachable("Dylib symbols in trampoline block?"); + }); auto H = JIT.addModuleSet(SingletonSet(std::move(M)), &MemMgr, - static_cast<RuntimeDyld::SymbolResolver*>( - nullptr)); + std::move(NonResolver)); JIT.emitAndFinalize(H); for (unsigned I = 0; I < this->NumTrampolinesPerBlock; ++I) { std::string Name = GetLabelName(I); |

