Author: rsmith Date: Fri Mar 21 20:43:32 2014 New Revision: 204535 URL: http://llvm.org/viewvc/llvm-project?rev=204535&view=rev Log: Refactor: move loading pending instantiations from chained PCHs to a more appropriate place, so that we only ask the external source once.
Modified: cfe/trunk/lib/Sema/Sema.cpp cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp cfe/trunk/test/Modules/Inputs/module.map Modified: cfe/trunk/lib/Sema/Sema.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.cpp?rev=204535&r1=204534&r2=204535&view=diff ============================================================================== --- cfe/trunk/lib/Sema/Sema.cpp (original) +++ cfe/trunk/lib/Sema/Sema.cpp Fri Mar 21 20:43:32 2014 @@ -620,7 +620,15 @@ void Sema::ActOnEndOfTranslationUnit() { // so it will find some names that are not required to be found. This is // valid, but we could do better by diagnosing if an instantiation uses a // name that was not visible at its first point of instantiation. + if (ExternalSource) { + // Load pending instantiations from the external source. + SmallVector<PendingImplicitInstantiation, 4> Pending; + ExternalSource->ReadPendingInstantiations(Pending); + PendingInstantiations.insert(PendingInstantiations.begin(), + Pending.begin(), Pending.end()); + } PerformPendingInstantiations(); + CheckDelayedMemberExceptionSpecs(); } Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp?rev=204535&r1=204534&r2=204535&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp Fri Mar 21 20:43:32 2014 @@ -3439,6 +3439,8 @@ void Sema::InstantiateFunctionDefinition PerformDependentDiagnostics(PatternDecl, TemplateArgs); + // FIXME: Notify the ASTMutationListener that we did this. + savedContext.pop(); } @@ -4592,14 +4594,6 @@ NamedDecl *Sema::FindInstantiatedDecl(So /// \brief Performs template instantiation for all implicit template /// instantiations we have seen until this point. void Sema::PerformPendingInstantiations(bool LocalOnly) { - // Load pending instantiations from the external source. - if (!LocalOnly && ExternalSource) { - SmallVector<PendingImplicitInstantiation, 4> Pending; - ExternalSource->ReadPendingInstantiations(Pending); - PendingInstantiations.insert(PendingInstantiations.begin(), - Pending.begin(), Pending.end()); - } - while (!PendingLocalImplicitInstantiations.empty() || (!LocalOnly && !PendingInstantiations.empty())) { PendingImplicitInstantiation Inst; Modified: cfe/trunk/test/Modules/Inputs/module.map URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/module.map?rev=204535&r1=204534&r2=204535&view=diff ============================================================================== --- cfe/trunk/test/Modules/Inputs/module.map (original) +++ cfe/trunk/test/Modules/Inputs/module.map Fri Mar 21 20:43:32 2014 @@ -15,6 +15,9 @@ module diamond_bottom { export * } module irgen { header "irgen.h" } +module cxx_irgen_top { header "cxx-irgen-top.h" } +module cxx_irgen_left { header "cxx-irgen-left.h" } +module cxx_irgen_right { header "cxx-irgen-right.h" } module lookup_left_objc { header "lookup_left.h" } module lookup_right_objc { header "lookup_right.h" } module lookup_left_cxx { header "lookup_left.hpp" } _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits