diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-06-29 22:20:11 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-06-29 22:20:11 +0000 |
commit | 8cc04599070eb2cf5485f32a2f70c1084e13bf47 (patch) | |
tree | bbe9a3a566eb099cd4c93f45790b2d5948b55abe /clang/lib/Lex/Preprocessor.cpp | |
parent | 8bb2ecf32d581a4cbe6e1227cc0340e75beb3546 (diff) | |
download | bcm5719-llvm-8cc04599070eb2cf5485f32a2f70c1084e13bf47.tar.gz bcm5719-llvm-8cc04599070eb2cf5485f32a2f70c1084e13bf47.zip |
Introduce a caching mechanism for macro expanded tokens.
Previously macro expanded tokens were added to Preprocessor's bump allocator and never released,
even after the TokenLexer that were lexing them was finished, thus they were wasting memory.
A very "useful" boost library was causing clang to eat 1 GB just for the expanded macro tokens.
Introduce a special cache that works like a stack; a TokenLexer can add the macro expanded tokens
in the cache, and when it finishes, the tokens are removed from the end of the cache.
Now consumed memory by expanded tokens for that library is ~ 1.5 MB.
Part of rdar://9327049.
llvm-svn: 134105
Diffstat (limited to 'clang/lib/Lex/Preprocessor.cpp')
-rw-r--r-- | clang/lib/Lex/Preprocessor.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp index 48a23880f36..2f43c8e30be 100644 --- a/clang/lib/Lex/Preprocessor.cpp +++ b/clang/lib/Lex/Preprocessor.cpp @@ -118,6 +118,8 @@ Preprocessor::Preprocessor(Diagnostic &diags, const LangOptions &opts, Preprocessor::~Preprocessor() { assert(BacktrackPositions.empty() && "EnableBacktrack/Backtrack imbalance!"); + assert(MacroExpandingLexersStack.empty() && MacroExpandedTokens.empty() && + "Preprocessor::HandleEndOfTokenLexer should have cleared those"); while (!IncludeMacroStack.empty()) { delete IncludeMacroStack.back().TheLexer; @@ -226,7 +228,7 @@ Preprocessor::macro_begin(bool IncludeExternalMacros) const { } size_t Preprocessor::getTotalMemory() const { - return BP.getTotalMemory(); + return BP.getTotalMemory() + MacroExpandedTokens.capacity()*sizeof(Token); } Preprocessor::macro_iterator |