From: Douglas Gregor Date: Thu, 19 Aug 2010 00:28:17 +0000 (+0000) Subject: Make sure to deallocate the identifier lookup tables and selector tables X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=501c1036560bb407f9be6834931253f0929cca86;p=clang Make sure to deallocate the identifier lookup tables and selector tables when destroying an ASTReader. Plugs a leak that shows up in libclang. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111488 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Serialization/ASTReader.h b/include/clang/Serialization/ASTReader.h index 41d64b8b0d..d4a0ea9f48 100644 --- a/include/clang/Serialization/ASTReader.h +++ b/include/clang/Serialization/ASTReader.h @@ -198,6 +198,7 @@ private: /// \brief Information that is needed for every file in the chain. struct PerFileData { PerFileData(); + ~PerFileData(); /// \brief The AST stat cache installed for this file, if any. /// diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp index eade765079..fb26851e3a 100644 --- a/lib/Serialization/ASTReader.cpp +++ b/lib/Serialization/ASTReader.cpp @@ -448,15 +448,6 @@ ASTReader::~ASTReader() { delete Chain[e - i - 1]; } -ASTReader::PerFileData::PerFileData() - : StatCache(0), LocalNumSLocEntries(0), LocalNumTypes(0), TypeOffsets(0), - LocalNumDecls(0), DeclOffsets(0), LocalNumIdentifiers(0), - IdentifierOffsets(0), IdentifierTableData(0), IdentifierLookupTable(0), - LocalNumMacroDefinitions(0), MacroDefinitionOffsets(0), - NumPreallocatedPreprocessingEntities(0), SelectorLookupTable(0), - SelectorLookupTableData(0), SelectorOffsets(0), LocalNumSelectors(0) -{} - void ASTReader::setDeserializationListener(ASTDeserializationListener *Listener) { DeserializationListener = Listener; @@ -3838,3 +3829,18 @@ void ASTReader::FinishedDeserializing() { } --NumCurrentElementsDeserializing; } + +ASTReader::PerFileData::PerFileData() + : StatCache(0), LocalNumSLocEntries(0), LocalNumTypes(0), TypeOffsets(0), + LocalNumDecls(0), DeclOffsets(0), LocalNumIdentifiers(0), + IdentifierOffsets(0), IdentifierTableData(0), IdentifierLookupTable(0), + LocalNumMacroDefinitions(0), MacroDefinitionOffsets(0), + NumPreallocatedPreprocessingEntities(0), SelectorLookupTable(0), + SelectorLookupTableData(0), SelectorOffsets(0), LocalNumSelectors(0) +{} + +ASTReader::PerFileData::~PerFileData() { + delete static_cast(IdentifierLookupTable); + delete static_cast(SelectorLookupTable); +} +