diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-06-15 17:44:38 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-06-15 17:44:38 +0000 |
commit | c722ea4fbf886d6460b256b5e819a4ee751d5fff (patch) | |
tree | cea324555f88ac0ae9013f3df472421992063846 /lib | |
parent | 7cf84d66965a7706004d8590b5af5fe54b85f525 (diff) |
Allocate template parameter lists for out-of-line definitions via the
ASTContext rather than via the normal heap.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@106008 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/AST/Decl.cpp | 13 | ||||
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 9 | ||||
-rw-r--r-- | lib/Sema/SemaTemplate.cpp | 7 |
3 files changed, 20 insertions, 9 deletions
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index 4593c6f0e5..25687e15c4 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -567,7 +567,8 @@ void DeclaratorDecl::setQualifierInfo(NestedNameSpecifier *Qualifier, } void -QualifierInfo::setTemplateParameterListsInfo(unsigned NumTPLists, +QualifierInfo::setTemplateParameterListsInfo(ASTContext &Context, + unsigned NumTPLists, TemplateParameterList **TPLists) { assert((NumTPLists == 0 || TPLists != 0) && "Empty array of template parameters with positive size!"); @@ -576,19 +577,25 @@ QualifierInfo::setTemplateParameterListsInfo(unsigned NumTPLists, // Free previous template parameters (if any). if (NumTemplParamLists > 0) { - delete[] TemplParamLists; + Context.Deallocate(TemplParamLists); TemplParamLists = 0; NumTemplParamLists = 0; } // Set info on matched template parameter lists (if any). if (NumTPLists > 0) { - TemplParamLists = new TemplateParameterList*[NumTPLists]; + TemplParamLists = new (Context) TemplateParameterList*[NumTPLists]; NumTemplParamLists = NumTPLists; for (unsigned i = NumTPLists; i-- > 0; ) TemplParamLists[i] = TPLists[i]; } } +void QualifierInfo::Destroy(ASTContext &Context) { + // FIXME: Deallocate template parameter lists themselves! + if (TemplParamLists) + Context.Deallocate(TemplParamLists); +} + //===----------------------------------------------------------------------===// // VarDecl Implementation //===----------------------------------------------------------------------===// diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 9ba3ee6ca4..d1818b813c 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -2573,7 +2573,8 @@ Sema::ActOnVariableDeclarator(Scope* S, Declarator& D, DeclContext* DC, SetNestedNameSpecifier(NewVD, D); if (NumMatchedTemplateParamLists > 0) { - NewVD->setTemplateParameterListsInfo(NumMatchedTemplateParamLists, + NewVD->setTemplateParameterListsInfo(Context, + NumMatchedTemplateParamLists, (TemplateParameterList**)TemplateParamLists.release()); } @@ -3151,7 +3152,8 @@ Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC, } if (NumMatchedTemplateParamLists > 0) { - NewFD->setTemplateParameterListsInfo(NumMatchedTemplateParamLists, + NewFD->setTemplateParameterListsInfo(Context, + NumMatchedTemplateParamLists, (TemplateParameterList**)TemplateParamLists.release()); } @@ -5412,7 +5414,8 @@ CreateNewDecl: = static_cast<NestedNameSpecifier*>(SS.getScopeRep()); New->setQualifierInfo(NNS, SS.getRange()); if (NumMatchedTemplateParamLists > 0) { - New->setTemplateParameterListsInfo(NumMatchedTemplateParamLists, + New->setTemplateParameterListsInfo(Context, + NumMatchedTemplateParamLists, (TemplateParameterList**) TemplateParameterLists.release()); } } diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp index 21d5702ea2..234665c4aa 100644 --- a/lib/Sema/SemaTemplate.cpp +++ b/lib/Sema/SemaTemplate.cpp @@ -3868,7 +3868,8 @@ Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, SequenceNumber); SetNestedNameSpecifier(Partial, SS); if (NumMatchedTemplateParamLists > 0) { - Partial->setTemplateParameterListsInfo(NumMatchedTemplateParamLists, + Partial->setTemplateParameterListsInfo(Context, + NumMatchedTemplateParamLists, (TemplateParameterList**) TemplateParameterLists.release()); } @@ -3929,8 +3930,8 @@ Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, PrevDecl); SetNestedNameSpecifier(Specialization, SS); if (NumMatchedTemplateParamLists > 0) { - Specialization->setTemplateParameterListsInfo( - NumMatchedTemplateParamLists, + Specialization->setTemplateParameterListsInfo(Context, + NumMatchedTemplateParamLists, (TemplateParameterList**) TemplateParameterLists.release()); } |