diff options
author | Fangrui Song <maskray@google.com> | 2018-08-20 19:15:02 +0000 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2018-08-20 19:15:02 +0000 |
commit | 4876977085fef6df32b491896c2e3df3dc6d838b (patch) | |
tree | 0710bee04185c2a3bcdf948bee3fa8352b686113 /clang/lib/Lex | |
parent | 2a08285cf370d1057fbda824100a846621ac1a47 (diff) | |
download | llvm-4876977085fef6df32b491896c2e3df3dc6d838b.zip llvm-4876977085fef6df32b491896c2e3df3dc6d838b.tar.gz llvm-4876977085fef6df32b491896c2e3df3dc6d838b.tar.bz2 |
[Lex] Make HeaderMaps a unique_ptr vector
Summary: unique_ptr makes the ownership clearer than a raw pointer container.
Reviewers: Eugene.Zelenko, dblaikie
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D50945
llvm-svn: 340198
Diffstat (limited to 'clang/lib/Lex')
-rw-r--r-- | clang/lib/Lex/HeaderMap.cpp | 5 | ||||
-rw-r--r-- | clang/lib/Lex/HeaderSearch.cpp | 14 |
2 files changed, 7 insertions, 12 deletions
diff --git a/clang/lib/Lex/HeaderMap.cpp b/clang/lib/Lex/HeaderMap.cpp index 24a14b6..23cb053 100644 --- a/clang/lib/Lex/HeaderMap.cpp +++ b/clang/lib/Lex/HeaderMap.cpp @@ -48,7 +48,8 @@ static inline unsigned HashHMapKey(StringRef Str) { /// map. If it doesn't look like a HeaderMap, it gives up and returns null. /// If it looks like a HeaderMap but is obviously corrupted, it puts a reason /// into the string error argument and returns null. -const HeaderMap *HeaderMap::Create(const FileEntry *FE, FileManager &FM) { +std::unique_ptr<HeaderMap> HeaderMap::Create(const FileEntry *FE, + FileManager &FM) { // If the file is too small to be a header map, ignore it. unsigned FileSize = FE->getSize(); if (FileSize <= sizeof(HMapHeader)) return nullptr; @@ -59,7 +60,7 @@ const HeaderMap *HeaderMap::Create(const FileEntry *FE, FileManager &FM) { bool NeedsByteSwap; if (!checkHeader(**FileBuffer, NeedsByteSwap)) return nullptr; - return new HeaderMap(std::move(*FileBuffer), NeedsByteSwap); + return std::unique_ptr<HeaderMap>(new HeaderMap(std::move(*FileBuffer), NeedsByteSwap)); } bool HeaderMapImpl::checkHeader(const llvm::MemoryBuffer &File, diff --git a/clang/lib/Lex/HeaderSearch.cpp b/clang/lib/Lex/HeaderSearch.cpp index fbfa54b..2ab020f 100644 --- a/clang/lib/Lex/HeaderSearch.cpp +++ b/clang/lib/Lex/HeaderSearch.cpp @@ -75,12 +75,6 @@ HeaderSearch::HeaderSearch(std::shared_ptr<HeaderSearchOptions> HSOpts, FileMgr(SourceMgr.getFileManager()), FrameworkMap(64), ModMap(SourceMgr, Diags, LangOpts, Target, *this) {} -HeaderSearch::~HeaderSearch() { - // Delete headermaps. - for (unsigned i = 0, e = HeaderMaps.size(); i != e; ++i) - delete HeaderMaps[i].second; -} - void HeaderSearch::PrintStats() { fprintf(stderr, "\n*** HeaderSearch Stats:\n"); fprintf(stderr, "%d files tracked.\n", (int)FileInfo.size()); @@ -113,12 +107,12 @@ const HeaderMap *HeaderSearch::CreateHeaderMap(const FileEntry *FE) { // Pointer equality comparison of FileEntries works because they are // already uniqued by inode. if (HeaderMaps[i].first == FE) - return HeaderMaps[i].second; + return HeaderMaps[i].second.get(); } - if (const HeaderMap *HM = HeaderMap::Create(FE, FileMgr)) { - HeaderMaps.push_back(std::make_pair(FE, HM)); - return HM; + if (std::unique_ptr<HeaderMap> HM = HeaderMap::Create(FE, FileMgr)) { + HeaderMaps.emplace_back(FE, std::move(HM)); + return HeaderMaps.back().second.get(); } return nullptr; |