[clang-doc] Fix memory leaks
authorJulie Hockett <juliehockett@google.com>
Fri, 24 Aug 2018 16:43:46 +0000 (16:43 +0000)
committerJulie Hockett <juliehockett@google.com>
Fri, 24 Aug 2018 16:43:46 +0000 (16:43 +0000)
Adds a virtual destructor to the base Info class.

Differential Revision: https://reviews.llvm.org/D51137

llvm-svn: 340620

clang-tools-extra/clang-doc/Representation.h
clang-tools-extra/clang-doc/Serialize.cpp

index 9e88bd9..7a127c0 100644 (file)
@@ -162,6 +162,8 @@ struct Info {
   Info(const Info &Other) = delete;
   Info(Info &&Other) = default;
 
+  virtual ~Info() = default;
+
   SymbolID USR =
       SymbolID(); // Unique identifier for the decl described by this Info.
   const InfoType IT = InfoType::IT_default; // InfoType of this particular Info.
index 873a9bd..4508221 100644 (file)
@@ -361,7 +361,7 @@ std::unique_ptr<Info> emitInfo(const FunctionDecl *D, const FullComment *FC,
     I->USR = Func.Namespace[0].USR;
   else
     I->USR = SymbolID();
-  I->ChildFunctions.push_back(std::move(Func));
+  I->ChildFunctions.emplace_back(std::move(Func));
   return std::unique_ptr<Info>{std::move(I)};
 }
 
@@ -382,7 +382,7 @@ std::unique_ptr<Info> emitInfo(const CXXMethodDecl *D, const FullComment *FC,
   // Wrap in enclosing scope
   auto I = llvm::make_unique<RecordInfo>();
   I->USR = ParentUSR;
-  I->ChildFunctions.push_back(std::move(Func));
+  I->ChildFunctions.emplace_back(std::move(Func));
   return std::unique_ptr<Info>{std::move(I)};
 }
 
@@ -402,13 +402,13 @@ std::unique_ptr<Info> emitInfo(const EnumDecl *D, const FullComment *FC,
     case InfoType::IT_namespace: {
       auto I = llvm::make_unique<NamespaceInfo>();
       I->USR = Enum.Namespace[0].USR;
-      I->ChildEnums.push_back(std::move(Enum));
+      I->ChildEnums.emplace_back(std::move(Enum));
       return std::unique_ptr<Info>{std::move(I)};
     }
     case InfoType::IT_record: {
       auto I = llvm::make_unique<RecordInfo>();
       I->USR = Enum.Namespace[0].USR;
-      I->ChildEnums.push_back(std::move(Enum));
+      I->ChildEnums.emplace_back(std::move(Enum));
       return std::unique_ptr<Info>{std::move(I)};
     }
     default:
@@ -419,7 +419,7 @@ std::unique_ptr<Info> emitInfo(const EnumDecl *D, const FullComment *FC,
   // Put in global namespace
   auto I = llvm::make_unique<NamespaceInfo>();
   I->USR = SymbolID();
-  I->ChildEnums.push_back(std::move(Enum));
+  I->ChildEnums.emplace_back(std::move(Enum));
   return std::unique_ptr<Info>{std::move(I)};
 }