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
This commit is contained in:
Douglas Gregor
2010-08-19 00:28:17 +00:00
parent 27b91a7410
commit b473b07cff
2 changed files with 16 additions and 9 deletions

View File

@@ -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.
///

View File

@@ -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);
}