From e95b2a06917e640b243ae9f903c5e3a3193aaa63 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Mon, 18 Aug 2014 19:16:31 +0000 Subject: [PATCH] Store std::unique_ptr in InMemoryBuffers. NFC. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215928 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Serialization/ASTReader.h | 5 ++-- include/clang/Serialization/ModuleManager.h | 8 +++--- lib/Frontend/ChainedIncludesSource.cpp | 27 ++++++++++++--------- lib/Serialization/ModuleManager.cpp | 23 +++++++++--------- 4 files changed, 35 insertions(+), 28 deletions(-) diff --git a/include/clang/Serialization/ASTReader.h b/include/clang/Serialization/ASTReader.h index 360e373ca2..49faafbe49 100644 --- a/include/clang/Serialization/ASTReader.h +++ b/include/clang/Serialization/ASTReader.h @@ -1418,8 +1418,9 @@ public: void UpdateSema(); /// \brief Add in-memory (virtual file) buffer. - void addInMemoryBuffer(StringRef &FileName, llvm::MemoryBuffer *Buffer) { - ModuleMgr.addInMemoryBuffer(FileName, Buffer); + void addInMemoryBuffer(StringRef &FileName, + std::unique_ptr Buffer) { + ModuleMgr.addInMemoryBuffer(FileName, std::move(Buffer)); } /// \brief Finalizes the AST reader's state before writing an AST file to diff --git a/include/clang/Serialization/ModuleManager.h b/include/clang/Serialization/ModuleManager.h index d84ab4d629..96c3619510 100644 --- a/include/clang/Serialization/ModuleManager.h +++ b/include/clang/Serialization/ModuleManager.h @@ -41,7 +41,8 @@ class ModuleManager { FileManager &FileMgr; /// \brief A lookup of in-memory (virtual file) buffers - llvm::DenseMap InMemoryBuffers; + llvm::DenseMap> + InMemoryBuffers; /// \brief The visitation order. SmallVector VisitOrder; @@ -141,7 +142,7 @@ public: ModuleFile *lookup(const FileEntry *File); /// \brief Returns the in-memory (virtual file) buffer with the given name - llvm::MemoryBuffer *lookupBuffer(StringRef Name); + std::unique_ptr lookupBuffer(StringRef Name); /// \brief Number of modules loaded unsigned size() const { return Chain.size(); } @@ -199,7 +200,8 @@ public: ModuleMap *modMap); /// \brief Add an in-memory buffer the list of known buffers - void addInMemoryBuffer(StringRef FileName, llvm::MemoryBuffer *Buffer); + void addInMemoryBuffer(StringRef FileName, + std::unique_ptr Buffer); /// \brief Set the global module index. void setGlobalIndex(GlobalModuleIndex *Index); diff --git a/lib/Frontend/ChainedIncludesSource.cpp b/lib/Frontend/ChainedIncludesSource.cpp index 6b14e2505f..7e1cf597ed 100644 --- a/lib/Frontend/ChainedIncludesSource.cpp +++ b/lib/Frontend/ChainedIncludesSource.cpp @@ -74,7 +74,7 @@ protected: static ASTReader * createASTReader(CompilerInstance &CI, StringRef pchFile, - SmallVectorImpl &memBufs, + SmallVectorImpl> &MemBufs, SmallVectorImpl &bufNames, ASTDeserializationListener *deserialListener = nullptr) { Preprocessor &PP = CI.getPreprocessor(); @@ -83,7 +83,7 @@ createASTReader(CompilerInstance &CI, StringRef pchFile, /*DisableValidation=*/true)); for (unsigned ti = 0; ti < bufNames.size(); ++ti) { StringRef sr(bufNames[ti]); - Reader->addInMemoryBuffer(sr, memBufs[ti]); + Reader->addInMemoryBuffer(sr, std::move(MemBufs[ti])); } Reader->setDeserializationListener(deserialListener); switch (Reader->ReadAST(pchFile, serialization::MK_PCH, SourceLocation(), @@ -118,7 +118,7 @@ IntrusiveRefCntPtr clang::createChainedIncludesSource( IntrusiveRefCntPtr source(new ChainedIncludesSource()); InputKind IK = CI.getFrontendOpts().Inputs[0].getKind(); - SmallVector serialBufs; + SmallVector, 4> SerialBufs; SmallVector serialBufNames; for (unsigned i = 0, e = includes.size(); i != e; ++i) { @@ -171,20 +171,22 @@ IntrusiveRefCntPtr clang::createChainedIncludesSource( PP.getBuiltinInfo().InitializeBuiltins(PP.getIdentifierTable(), PP.getLangOpts()); } else { - assert(!serialBufs.empty()); - SmallVector bufs; + assert(!SerialBufs.empty()); + SmallVector, 4> Bufs; // TODO: Pass through the existing MemoryBuffer instances instead of // allocating new ones. - for (auto *SB : serialBufs) - bufs.push_back(llvm::MemoryBuffer::getMemBuffer(SB->getBuffer())); + for (auto &SB : SerialBufs) + Bufs.push_back(std::unique_ptr( + llvm::MemoryBuffer::getMemBuffer(SB->getBuffer()))); std::string pchName = includes[i-1]; llvm::raw_string_ostream os(pchName); os << ".pch" << i-1; serialBufNames.push_back(os.str()); IntrusiveRefCntPtr Reader; - Reader = createASTReader(*Clang, pchName, bufs, serialBufNames, - Clang->getASTConsumer().GetASTDeserializationListener()); + Reader = createASTReader( + *Clang, pchName, Bufs, serialBufNames, + Clang->getASTConsumer().GetASTDeserializationListener()); if (!Reader) return nullptr; Clang->setModuleManager(Reader); @@ -196,14 +198,15 @@ IntrusiveRefCntPtr clang::createChainedIncludesSource( ParseAST(Clang->getSema()); Clang->getDiagnosticClient().EndSourceFile(); - serialBufs.push_back(llvm::MemoryBuffer::getMemBufferCopy(OS.str())); + SerialBufs.push_back(std::unique_ptr( + llvm::MemoryBuffer::getMemBufferCopy(OS.str()))); source->CIs.push_back(Clang.release()); } - assert(!serialBufs.empty()); + assert(!SerialBufs.empty()); std::string pchName = includes.back() + ".pch-final"; serialBufNames.push_back(pchName); - Reader = createASTReader(CI, pchName, serialBufs, serialBufNames); + Reader = createASTReader(CI, pchName, SerialBufs, serialBufNames); if (!Reader) return nullptr; diff --git a/lib/Serialization/ModuleManager.cpp b/lib/Serialization/ModuleManager.cpp index 8b0a4ed494..7bdc40a996 100644 --- a/lib/Serialization/ModuleManager.cpp +++ b/lib/Serialization/ModuleManager.cpp @@ -45,10 +45,11 @@ ModuleFile *ModuleManager::lookup(const FileEntry *File) { return Known->second; } -llvm::MemoryBuffer *ModuleManager::lookupBuffer(StringRef Name) { +std::unique_ptr +ModuleManager::lookupBuffer(StringRef Name) { const FileEntry *Entry = FileMgr.getFile(Name, /*openFile=*/false, /*cacheFailure=*/false); - return InMemoryBuffers[Entry]; + return std::move(InMemoryBuffers[Entry]); } ModuleManager::AddModuleResult @@ -98,10 +99,9 @@ ModuleManager::addModule(StringRef FileName, ModuleKind Type, } // Load the contents of the module - if (llvm::MemoryBuffer *Buffer = lookupBuffer(FileName)) { + if (std::unique_ptr Buffer = lookupBuffer(FileName)) { // The buffer was already provided for us. - assert(Buffer && "Passed null buffer"); - New->Buffer.reset(Buffer); + New->Buffer = std::move(Buffer); } else { // Open the AST file. std::error_code ec; @@ -187,12 +187,13 @@ void ModuleManager::removeModules( Chain.erase(first, last); } -void ModuleManager::addInMemoryBuffer(StringRef FileName, - llvm::MemoryBuffer *Buffer) { - - const FileEntry *Entry = FileMgr.getVirtualFile(FileName, - Buffer->getBufferSize(), 0); - InMemoryBuffers[Entry] = Buffer; +void +ModuleManager::addInMemoryBuffer(StringRef FileName, + std::unique_ptr Buffer) { + + const FileEntry *Entry = + FileMgr.getVirtualFile(FileName, Buffer->getBufferSize(), 0); + InMemoryBuffers[Entry] = std::move(Buffer); } ModuleManager::VisitState *ModuleManager::allocateVisitState() { -- 2.40.0