From cd7ba1c183bbe09a4c9ca5b58a35ef5374ec0882 Mon Sep 17 00:00:00 2001 From: John McCall Date: Wed, 21 Oct 2009 00:58:09 +0000 Subject: [PATCH] Clone Sema::SubstType for DeclaratorInfos. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@84724 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/Sema.h | 4 ++++ lib/Sema/SemaTemplateInstantiate.cpp | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h index 4ad3deaadf..0b55ecd770 100644 --- a/lib/Sema/Sema.h +++ b/lib/Sema/Sema.h @@ -3152,6 +3152,10 @@ public: void PerformPendingImplicitInstantiations(); + DeclaratorInfo *SubstType(DeclaratorInfo *T, + const MultiLevelTemplateArgumentList &TemplateArgs, + SourceLocation Loc, DeclarationName Entity); + QualType SubstType(QualType T, const MultiLevelTemplateArgumentList &TemplateArgs, SourceLocation Loc, DeclarationName Entity); diff --git a/lib/Sema/SemaTemplateInstantiate.cpp b/lib/Sema/SemaTemplateInstantiate.cpp index 9b9fc00848..53d158088c 100644 --- a/lib/Sema/SemaTemplateInstantiate.cpp +++ b/lib/Sema/SemaTemplateInstantiate.cpp @@ -702,6 +702,22 @@ TemplateInstantiator::TransformTemplateTypeParmType(TypeLocBuilder &TLB, /// /// \returns If the instantiation succeeds, the instantiated /// type. Otherwise, produces diagnostics and returns a NULL type. +DeclaratorInfo *Sema::SubstType(DeclaratorInfo *T, + const MultiLevelTemplateArgumentList &Args, + SourceLocation Loc, + DeclarationName Entity) { + assert(!ActiveTemplateInstantiations.empty() && + "Cannot perform an instantiation without some context on the " + "instantiation stack"); + + if (!T->getType()->isDependentType()) + return T; + + TemplateInstantiator Instantiator(*this, Args, Loc, Entity); + return Instantiator.TransformType(T); +} + +/// Deprecated form of the above. QualType Sema::SubstType(QualType T, const MultiLevelTemplateArgumentList &TemplateArgs, SourceLocation Loc, DeclarationName Entity) { -- 2.50.1