diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/ExecutionEngine/Orc/Layer.h | 3 | ||||
| -rw-r--r-- | llvm/lib/ExecutionEngine/Orc/Layer.cpp | 10 |
2 files changed, 7 insertions, 6 deletions
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/Layer.h b/llvm/include/llvm/ExecutionEngine/Orc/Layer.h index 18dd4573119..ed839b518b7 100644 --- a/llvm/include/llvm/ExecutionEngine/Orc/Layer.h +++ b/llvm/include/llvm/ExecutionEngine/Orc/Layer.h @@ -63,11 +63,10 @@ public: protected: std::unique_ptr<Module> M; + std::map<SymbolStringPtr, GlobalValue *> SymbolToDefinition; private: void discard(const VSO &V, SymbolStringPtr Name) override; - - std::map<SymbolStringPtr, GlobalValue *> Discardable; }; /// MaterializationUnit that materializes modules by calling the 'emit' method diff --git a/llvm/lib/ExecutionEngine/Orc/Layer.cpp b/llvm/lib/ExecutionEngine/Orc/Layer.cpp index 346dde4f7a8..1927bce45d4 100644 --- a/llvm/lib/ExecutionEngine/Orc/Layer.cpp +++ b/llvm/lib/ExecutionEngine/Orc/Layer.cpp @@ -46,17 +46,19 @@ IRMaterializationUnit::IRMaterializationUnit(ExecutionSession &ES, !G.hasAvailableExternallyLinkage()) { auto MangledName = Mangle(G.getName()); SymbolFlags[MangledName] = JITSymbolFlags::fromGlobalValue(G); - Discardable[MangledName] = &G; + SymbolToDefinition[MangledName] = &G; } } } void IRMaterializationUnit::discard(const VSO &V, SymbolStringPtr Name) { - auto I = Discardable.find(Name); - assert(I != Discardable.end() && + auto I = SymbolToDefinition.find(Name); + assert(I != SymbolToDefinition.end() && "Symbol not provided by this MU, or previously discarded"); + assert(!I->second->isDeclaration() && + "Discard should only apply to definitions"); I->second->setLinkage(GlobalValue::AvailableExternallyLinkage); - Discardable.erase(I); + SymbolToDefinition.erase(I); } BasicIRLayerMaterializationUnit::BasicIRLayerMaterializationUnit( |

