diff options
Diffstat (limited to 'lib/Sema/SemaTemplateInstantiateDecl.cpp')
-rw-r--r-- | lib/Sema/SemaTemplateInstantiateDecl.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp index 461302f81d..ece71bc0d3 100644 --- a/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -597,6 +597,8 @@ void Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, if (Function->isInvalidDecl()) return; + assert(!Function->getBody(Context) && "Already instantiated!"); + // Find the function body that we'll be substituting. const FunctionDecl *PatternDecl = Function->getInstantiatedFromMemberFunction(); @@ -776,3 +778,18 @@ NamedDecl * Sema::InstantiateCurrentDeclRef(NamedDecl *D) { return D; } + +/// \brief Performs template instantiation for all implicit template +/// instantiations we have seen until this point. +void Sema::PerformPendingImplicitInstantiations() { + while (!PendingImplicitInstantiations.empty()) { + PendingImplicitInstantiation Inst = PendingImplicitInstantiations.front(); + PendingImplicitInstantiations.pop(); + + if (FunctionDecl *Function = dyn_cast<FunctionDecl>(Inst.first)) + if (!Function->getBody(Context)) + InstantiateFunctionDefinition(/*FIXME:*/Inst.second, Function); + + // FIXME: instantiation static member variables + } +} |