summaryrefslogtreecommitdiffstats
path: root/clang/lib/Lex/Preprocessor.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2010-10-19 17:40:53 +0000
committerTed Kremenek <kremenek@apple.com>2010-10-19 17:40:53 +0000
commit2c8028bcf40f4bb44b3c73f788d2f63d2d353d9a (patch)
tree56e43937754e9ea307e5973ad2978a796fb9c1e6 /clang/lib/Lex/Preprocessor.cpp
parent6339f1ce2f3f6936c98004fc0883c747fa859435 (diff)
downloadbcm5719-llvm-2c8028bcf40f4bb44b3c73f788d2f63d2d353d9a.tar.gz
bcm5719-llvm-2c8028bcf40f4bb44b3c73f788d2f63d2d353d9a.zip
In ~Preprocessor(), also cleanup the MacroInfo objects left-over from stray "#pragma push_macro" uses. This
fixes a potential memory leak. llvm-svn: 116826
Diffstat (limited to 'clang/lib/Lex/Preprocessor.cpp')
-rw-r--r--clang/lib/Lex/Preprocessor.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp
index 5160acf19e1..56ed7659249 100644
--- a/clang/lib/Lex/Preprocessor.cpp
+++ b/clang/lib/Lex/Preprocessor.cpp
@@ -123,6 +123,13 @@ Preprocessor::~Preprocessor() {
// memory alocated by MacroInfo.
(*I)->Destroy();
}
+ for (llvm::DenseMap<IdentifierInfo*, std::vector<MacroInfo*> >::iterator I =
+ PragmaPushMacroInfo.begin(), E = PragmaPushMacroInfo.end(); I!=E; ++I){
+ for (std::vector<MacroInfo*>::iterator I2 = I->second.begin(), E2 = I->second.end();
+ I2 != E2; ++I2) {
+ (*I2)->Destroy();
+ }
+ }
// Free any cached macro expanders.
for (unsigned i = 0, e = NumCachedTokenLexers; i != e; ++i)
OpenPOWER on IntegriCloud