Author: rsmith Date: Wed Sep 4 15:14:50 2019 New Revision: 370991 URL: http://llvm.org/viewvc/llvm-project?rev=370991&view=rev Log: For PR43213, track whether template parameters are implicit through template instantiation so we know whether to mangle them in lambda-expressions.
Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp cfe/trunk/test/CodeGenCXX/mangle-lambda-explicit-template-params.cpp Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp?rev=370991&r1=370990&r2=370991&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp Wed Sep 4 15:14:50 2019 @@ -2337,6 +2337,7 @@ Decl *TemplateDeclInstantiator::VisitTem D->getDepth() - TemplateArgs.getNumSubstitutedLevels(), D->getIndex(), D->getIdentifier(), D->wasDeclaredWithTypename(), D->isParameterPack()); Inst->setAccess(AS_public); + Inst->setImplicit(D->isImplicit()); if (D->hasDefaultArgument() && !D->defaultArgumentWasInherited()) { TypeSourceInfo *InstantiatedDefaultArg = @@ -2483,6 +2484,7 @@ Decl *TemplateDeclInstantiator::VisitNon D->getPosition(), D->getIdentifier(), T, D->isParameterPack(), DI); Param->setAccess(AS_public); + Param->setImplicit(D->isImplicit()); if (Invalid) Param->setInvalidDecl(); @@ -2626,6 +2628,7 @@ TemplateDeclInstantiator::VisitTemplateT D->getDefaultArgument().getTemplateNameLoc())); } Param->setAccess(AS_public); + Param->setImplicit(D->isImplicit()); // Introduce this template parameter's instantiation into the instantiation // scope. Modified: cfe/trunk/test/CodeGenCXX/mangle-lambda-explicit-template-params.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle-lambda-explicit-template-params.cpp?rev=370991&r1=370990&r2=370991&view=diff ============================================================================== --- cfe/trunk/test/CodeGenCXX/mangle-lambda-explicit-template-params.cpp (original) +++ cfe/trunk/test/CodeGenCXX/mangle-lambda-explicit-template-params.cpp Wed Sep 4 15:14:50 2019 @@ -32,3 +32,10 @@ inline void inline_func() { void call_inline_func() { inline_func(); } + +template<typename> void f() { + // CHECK: define linkonce_odr {{.*}} @_ZZ1fIiEvvENKUlT_E_clIiEEDaS0_( + auto x = [](auto){}; + x(0); +} +void use_f() { f<int>(); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits