diff options
| -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( | 

