Author: jlebar Date: Mon Oct 10 11:26:08 2016 New Revision: 283766 URL: http://llvm.org/viewvc/llvm-project?rev=283766&view=rev Log: [Sema] Use unique_ptr instead of raw pointers in the late-parsed templates map.
Summary: This is possible now that MapVector supports move-only values. Depends on D25404. Reviewers: timshen Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D25405 Modified: cfe/trunk/include/clang/Sema/ExternalSemaSource.h cfe/trunk/include/clang/Sema/MultiplexExternalSemaSource.h cfe/trunk/include/clang/Sema/Sema.h cfe/trunk/include/clang/Serialization/ASTReader.h cfe/trunk/lib/Sema/MultiplexExternalSemaSource.cpp cfe/trunk/lib/Sema/Sema.cpp cfe/trunk/lib/Sema/SemaTemplate.cpp cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp cfe/trunk/lib/Serialization/ASTReader.cpp cfe/trunk/lib/Serialization/ASTWriter.cpp Modified: cfe/trunk/include/clang/Sema/ExternalSemaSource.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/ExternalSemaSource.h?rev=283766&r1=283765&r2=283766&view=diff ============================================================================== --- cfe/trunk/include/clang/Sema/ExternalSemaSource.h (original) +++ cfe/trunk/include/clang/Sema/ExternalSemaSource.h Mon Oct 10 11:26:08 2016 @@ -190,7 +190,8 @@ public: /// external source should take care not to introduce the same map entries /// repeatedly. virtual void ReadLateParsedTemplates( - llvm::MapVector<const FunctionDecl *, LateParsedTemplate *> &LPTMap) {} + llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>> + &LPTMap) {} /// \copydoc Sema::CorrectTypo /// \note LookupKind must correspond to a valid Sema::LookupNameKind Modified: cfe/trunk/include/clang/Sema/MultiplexExternalSemaSource.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/MultiplexExternalSemaSource.h?rev=283766&r1=283765&r2=283766&view=diff ============================================================================== --- cfe/trunk/include/clang/Sema/MultiplexExternalSemaSource.h (original) +++ cfe/trunk/include/clang/Sema/MultiplexExternalSemaSource.h Mon Oct 10 11:26:08 2016 @@ -322,8 +322,8 @@ public: /// external source should take care not to introduce the same map entries /// repeatedly. void ReadLateParsedTemplates( - llvm::MapVector<const FunctionDecl *, LateParsedTemplate *> &LPTMap) - override; + llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>> + &LPTMap) override; /// \copydoc ExternalSemaSource::CorrectTypo /// \note Returns the first nonempty correction. Modified: cfe/trunk/include/clang/Sema/Sema.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=283766&r1=283765&r2=283766&view=diff ============================================================================== --- cfe/trunk/include/clang/Sema/Sema.h (original) +++ cfe/trunk/include/clang/Sema/Sema.h Mon Oct 10 11:26:08 2016 @@ -551,7 +551,8 @@ public: SmallVector<std::pair<CXXMethodDecl*, const FunctionProtoType*>, 2> DelayedDefaultedMemberExceptionSpecs; - typedef llvm::MapVector<const FunctionDecl *, LateParsedTemplate *> + typedef llvm::MapVector<const FunctionDecl *, + std::unique_ptr<LateParsedTemplate>> LateParsedTemplateMapT; LateParsedTemplateMapT LateParsedTemplateMap; Modified: cfe/trunk/include/clang/Serialization/ASTReader.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTReader.h?rev=283766&r1=283765&r2=283766&view=diff ============================================================================== --- cfe/trunk/include/clang/Serialization/ASTReader.h (original) +++ cfe/trunk/include/clang/Serialization/ASTReader.h Mon Oct 10 11:26:08 2016 @@ -1877,8 +1877,8 @@ public: SourceLocation> > &Pending) override; void ReadLateParsedTemplates( - llvm::MapVector<const FunctionDecl *, LateParsedTemplate *> &LPTMap) - override; + llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>> + &LPTMap) override; /// \brief Load a selector from disk, registering its ID if it exists. void LoadSelector(Selector Sel); Modified: cfe/trunk/lib/Sema/MultiplexExternalSemaSource.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/MultiplexExternalSemaSource.cpp?rev=283766&r1=283765&r2=283766&view=diff ============================================================================== --- cfe/trunk/lib/Sema/MultiplexExternalSemaSource.cpp (original) +++ cfe/trunk/lib/Sema/MultiplexExternalSemaSource.cpp Mon Oct 10 11:26:08 2016 @@ -285,7 +285,8 @@ void MultiplexExternalSemaSource::ReadPe } void MultiplexExternalSemaSource::ReadLateParsedTemplates( - llvm::MapVector<const FunctionDecl *, LateParsedTemplate *> &LPTMap) { + llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>> + &LPTMap) { for (size_t i = 0; i < Sources.size(); ++i) Sources[i]->ReadLateParsedTemplates(LPTMap); } Modified: cfe/trunk/lib/Sema/Sema.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.cpp?rev=283766&r1=283765&r2=283766&view=diff ============================================================================== --- cfe/trunk/lib/Sema/Sema.cpp (original) +++ cfe/trunk/lib/Sema/Sema.cpp Mon Oct 10 11:26:08 2016 @@ -259,7 +259,6 @@ void Sema::Initialize() { } Sema::~Sema() { - llvm::DeleteContainerSeconds(LateParsedTemplateMap); if (VisContext) FreeVisContext(); // Kill all the active scopes. for (unsigned I = 1, E = FunctionScopes.size(); I != E; ++I) Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=283766&r1=283765&r2=283766&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaTemplate.cpp (original) +++ cfe/trunk/lib/Sema/SemaTemplate.cpp Mon Oct 10 11:26:08 2016 @@ -8668,12 +8668,12 @@ void Sema::MarkAsLateParsedTemplate(Func if (!FD) return; - LateParsedTemplate *LPT = new LateParsedTemplate; + auto LPT = llvm::make_unique<LateParsedTemplate>(); // Take tokens to avoid allocations LPT->Toks.swap(Toks); LPT->D = FnD; - LateParsedTemplateMap.insert(std::make_pair(FD, LPT)); + LateParsedTemplateMap.insert(std::make_pair(FD, std::move(LPT))); FD->setLateTemplateParsed(true); } Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp?rev=283766&r1=283765&r2=283766&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp Mon Oct 10 11:26:08 2016 @@ -3622,9 +3622,10 @@ void Sema::InstantiateFunctionDefinition if (PatternDecl->isFromASTFile()) ExternalSource->ReadLateParsedTemplates(LateParsedTemplateMap); - LateParsedTemplate *LPT = LateParsedTemplateMap.lookup(PatternDecl); - assert(LPT && "missing LateParsedTemplate"); - LateTemplateParser(OpaqueParser, *LPT); + auto LPTIter = LateParsedTemplateMap.find(PatternDecl); + assert(LPTIter != LateParsedTemplateMap.end() && + "missing LateParsedTemplate"); + LateTemplateParser(OpaqueParser, *LPTIter->second); Pattern = PatternDecl->getBody(PatternDecl); } Modified: cfe/trunk/lib/Serialization/ASTReader.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=283766&r1=283765&r2=283766&view=diff ============================================================================== --- cfe/trunk/lib/Serialization/ASTReader.cpp (original) +++ cfe/trunk/lib/Serialization/ASTReader.cpp Mon Oct 10 11:26:08 2016 @@ -7556,12 +7556,13 @@ void ASTReader::ReadPendingInstantiation } void ASTReader::ReadLateParsedTemplates( - llvm::MapVector<const FunctionDecl *, LateParsedTemplate *> &LPTMap) { + llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>> + &LPTMap) { for (unsigned Idx = 0, N = LateParsedTemplates.size(); Idx < N; /* In loop */) { FunctionDecl *FD = cast<FunctionDecl>(GetDecl(LateParsedTemplates[Idx++])); - LateParsedTemplate *LT = new LateParsedTemplate; + auto LT = llvm::make_unique<LateParsedTemplate>(); LT->D = GetDecl(LateParsedTemplates[Idx++]); ModuleFile *F = getOwningModuleFile(LT->D); @@ -7572,7 +7573,7 @@ void ASTReader::ReadLateParsedTemplates( for (unsigned T = 0; T < TokN; ++T) LT->Toks.push_back(ReadToken(*F, LateParsedTemplates, Idx)); - LPTMap.insert(std::make_pair(FD, LT)); + LPTMap.insert(std::make_pair(FD, std::move(LT))); } LateParsedTemplates.clear(); Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=283766&r1=283765&r2=283766&view=diff ============================================================================== --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original) +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Mon Oct 10 11:26:08 2016 @@ -4009,14 +4009,14 @@ void ASTWriter::WriteLateParsedTemplates return; RecordData Record; - for (auto LPTMapEntry : LPTMap) { + for (auto &LPTMapEntry : LPTMap) { const FunctionDecl *FD = LPTMapEntry.first; - LateParsedTemplate *LPT = LPTMapEntry.second; + LateParsedTemplate &LPT = *LPTMapEntry.second; AddDeclRef(FD, Record); - AddDeclRef(LPT->D, Record); - Record.push_back(LPT->Toks.size()); + AddDeclRef(LPT.D, Record); + Record.push_back(LPT.Toks.size()); - for (const auto &Tok : LPT->Toks) { + for (const auto &Tok : LPT.Toks) { AddToken(Tok, Record); } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits