]> granicus.if.org Git - clang/commitdiff
unique_ptrify PTHManager's PerIDCache using the newly added llvm::FreeDeleter
authorDavid Blaikie <dblaikie@gmail.com>
Fri, 29 Aug 2014 22:04:45 +0000 (22:04 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Fri, 29 Aug 2014 22:04:45 +0000 (22:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216786 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Lex/PTHManager.h
lib/Lex/PTHLexer.cpp

index 7f9cfbab7c00e14bb038a1d428685d0e673f3721..64ecf5f575f30ee3ed4034ad30d8ea1439ec6064 100644 (file)
@@ -52,7 +52,7 @@ class PTHManager : public IdentifierInfoLookup {
 
   /// IdMap - A lazily generated cache mapping from persistent identifiers to
   ///  IdentifierInfo*.
-  IdentifierInfo** PerIDCache;
+  std::unique_ptr<IdentifierInfo *[], llvm::FreeDeleter> PerIDCache;
 
   /// FileLookup - Abstract data structure used for mapping between files
   ///  and token data in the PTH file.
@@ -86,7 +86,8 @@ class PTHManager : public IdentifierInfoLookup {
   /// method.
   PTHManager(std::unique_ptr<const llvm::MemoryBuffer> buf,
              std::unique_ptr<PTHFileLookup> fileLookup,
-             const unsigned char *idDataTable, IdentifierInfo **perIDCache,
+             const unsigned char *idDataTable,
+             std::unique_ptr<IdentifierInfo *[], llvm::FreeDeleter> perIDCache,
              std::unique_ptr<PTHStringIdLookup> stringIdLookup, unsigned numIds,
              const unsigned char *spellingBase, const char *originalSourceFile);
 
index cff160b6ff428cb45d727996ce2c3fe85206d360..af7a15384e3560d854d3460ecaff3110ed8bc015 100644 (file)
@@ -413,20 +413,18 @@ public:
 // PTHManager methods.
 //===----------------------------------------------------------------------===//
 
-PTHManager::PTHManager(std::unique_ptr<const llvm::MemoryBuffer> buf,
-                       std::unique_ptr<PTHFileLookup> fileLookup,
-                       const unsigned char *idDataTable,
-                       IdentifierInfo **perIDCache,
-                       std::unique_ptr<PTHStringIdLookup> stringIdLookup,
-                       unsigned numIds, const unsigned char *spellingBase,
-                       const char *originalSourceFile)
-    : Buf(std::move(buf)), PerIDCache(perIDCache),
+PTHManager::PTHManager(
+    std::unique_ptr<const llvm::MemoryBuffer> buf,
+    std::unique_ptr<PTHFileLookup> fileLookup, const unsigned char *idDataTable,
+    std::unique_ptr<IdentifierInfo *[], llvm::FreeDeleter> perIDCache,
+    std::unique_ptr<PTHStringIdLookup> stringIdLookup, unsigned numIds,
+    const unsigned char *spellingBase, const char *originalSourceFile)
+    : Buf(std::move(buf)), PerIDCache(std::move(perIDCache)),
       FileLookup(std::move(fileLookup)), IdDataTable(idDataTable),
       StringIdLookup(std::move(stringIdLookup)), NumIds(numIds), PP(nullptr),
       SpellingBase(spellingBase), OriginalSourceFile(originalSourceFile) {}
 
 PTHManager::~PTHManager() {
-  free(PerIDCache);
 }
 
 static void InvalidPTH(DiagnosticsEngine &Diags, const char *Msg) {
@@ -537,10 +535,10 @@ PTHManager *PTHManager::Create(const std::string &file,
   // Pre-allocate the persistent ID -> IdentifierInfo* cache.  We use calloc()
   // so that we in the best case only zero out memory once when the OS returns
   // us new pages.
-  IdentifierInfo **PerIDCache = nullptr;
+  std::unique_ptr<IdentifierInfo *[], llvm::FreeDeleter> PerIDCache;
 
   if (NumIds) {
-    PerIDCache = (IdentifierInfo**)calloc(NumIds, sizeof(*PerIDCache));
+    PerIDCache.reset((IdentifierInfo **)calloc(NumIds, sizeof(PerIDCache[0])));
     if (!PerIDCache) {
       InvalidPTH(Diags, "Could not allocate memory for processing PTH file");
       return nullptr;
@@ -554,9 +552,9 @@ PTHManager *PTHManager::Create(const std::string &file,
   if (!len) originalSourceBase = nullptr;
 
   // Create the new PTHManager.
-  return new PTHManager(std::move(File), std::move(FL), IData, PerIDCache,
-                        std::move(SL), NumIds, spellingBase,
-                        (const char *)originalSourceBase);
+  return new PTHManager(std::move(File), std::move(FL), IData,
+                        std::move(PerIDCache), std::move(SL), NumIds,
+                        spellingBase, (const char *)originalSourceBase);
 }
 
 IdentifierInfo* PTHManager::LazilyCreateIdentifierInfo(unsigned PersistentID) {