diff options
author | Chris Lattner <sabre@nondot.org> | 2009-03-04 06:50:57 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-03-04 06:50:57 +0000 |
commit | 32fca722dd974b8202d0fb9c71b6c185c0767da6 (patch) | |
tree | 4dcab62d65cc30aec108b053b4b000433ba896ba /lib/Lex/TokenLexer.cpp | |
parent | 0b2b6e1cb1573bb295c0a65813dc4df8d57f305b (diff) |
make the token lexer allocate its temporary token buffers for
preexpanded macro arguments from the preprocessor's bump pointer.
This reduces # mallocs from 12444 to 11792.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66025 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Lex/TokenLexer.cpp')
-rw-r--r-- | lib/Lex/TokenLexer.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/Lex/TokenLexer.cpp b/lib/Lex/TokenLexer.cpp index f0e2fbdfa6..898b3a780d 100644 --- a/lib/Lex/TokenLexer.cpp +++ b/lib/Lex/TokenLexer.cpp @@ -88,6 +88,7 @@ void TokenLexer::destroy() { if (OwnsTokens) { delete [] Tokens; Tokens = 0; + OwnsTokens = false; } // TokenLexer owns its formal arguments. @@ -264,13 +265,19 @@ void TokenLexer::ExpandFunctionArguments() { // If anything changed, install this as the new Tokens list. if (MadeChange) { + assert(!OwnsTokens && "This would leak if we already own the token list"); // This is deleted in the dtor. NumTokens = ResultToks.size(); - Token *Res = new Token[ResultToks.size()]; + llvm::BumpPtrAllocator &Alloc = PP.getPreprocessorAllocator(); + Token *Res = + static_cast<Token *>(Alloc.Allocate(sizeof(Token)*ResultToks.size(), + llvm::alignof<Token>())); if (NumTokens) memcpy(Res, &ResultToks[0], NumTokens*sizeof(Token)); Tokens = Res; - OwnsTokens = true; + + // The preprocessor bump pointer owns these tokens, not us. + OwnsTokens = false; } } |