diff options
author | Ted Kremenek <kremenek@apple.com> | 2010-10-19 18:16:54 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2010-10-19 18:16:54 +0000 |
commit | af8fa25c0d4e0540952a50bbd06dc1558954ccd9 (patch) | |
tree | 6d07abeb5be980fc9b4bd795528cbc365cf087fb /include/clang/Lex/Preprocessor.h | |
parent | 0d7d39939a96b42bc6aa05b31fc1095cbe246021 (diff) |
Simplify lifetime management of MacroInfo objects in Preprocessor by having the Preprocessor maintain them in a linked
list of allocated MacroInfos. This requires only 1 extra pointer per MacroInfo object, and allows us to blow them
away in one place. This fixes an elusive memory leak with MacroInfos (whose exact location I couldn't still figure
out despite substantial digging).
Fixes <rdar://problem/8361834>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116842 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/clang/Lex/Preprocessor.h')
-rw-r--r-- | include/clang/Lex/Preprocessor.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/include/clang/Lex/Preprocessor.h b/include/clang/Lex/Preprocessor.h index 752cbed7b3..a1a68dce45 100644 --- a/include/clang/Lex/Preprocessor.h +++ b/include/clang/Lex/Preprocessor.h @@ -14,6 +14,7 @@ #ifndef LLVM_CLANG_LEX_PREPROCESSOR_H #define LLVM_CLANG_LEX_PREPROCESSOR_H +#include "clang/Lex/MacroInfo.h" #include "clang/Lex/Lexer.h" #include "clang/Lex/PTHLexer.h" #include "clang/Lex/PPCallbacks.h" @@ -251,6 +252,15 @@ private: // Cached tokens state. /// invoked (at which point the last position is popped). std::vector<CachedTokensTy::size_type> BacktrackPositions; + struct MacroInfoChain { + MacroInfo MI; + MacroInfoChain *Next; + }; + + /// MacroInfos are managed as a chain for easy disposal. This is the head + /// of that list. + MacroInfoChain *MIChainHead; + public: Preprocessor(Diagnostic &diags, const LangOptions &opts, const TargetInfo &target, |