diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-08-19 00:28:17 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-08-19 00:28:17 +0000 |
commit | b473b07cffd38eba9e8fffd3210652f732798f0a (patch) | |
tree | 05c57303379ee6d7edcecee98d925f037ee14c30 | |
parent | 27b91a74104e008d58bf183d9a5e9c7744a8beeb (diff) | |
download | bcm5719-llvm-b473b07cffd38eba9e8fffd3210652f732798f0a.tar.gz bcm5719-llvm-b473b07cffd38eba9e8fffd3210652f732798f0a.zip |
Make sure to deallocate the identifier lookup tables and selector tables
when destroying an ASTReader. Plugs a leak that shows up in libclang.
llvm-svn: 111488
-rw-r--r-- | clang/include/clang/Serialization/ASTReader.h | 1 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 24 |
2 files changed, 16 insertions, 9 deletions
diff --git a/clang/include/clang/Serialization/ASTReader.h b/clang/include/clang/Serialization/ASTReader.h index 41d64b8b0de..d4a0ea9f48c 100644 --- a/clang/include/clang/Serialization/ASTReader.h +++ b/clang/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/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index eade7650791..fb26851e3a3 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/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<ASTIdentifierLookupTable *>(IdentifierLookupTable); + delete static_cast<ASTSelectorLookupTable *>(SelectorLookupTable); +} + |