From 4d3745ade6baba16b7cec50c22ca41ce78f488ea Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Tue, 23 Mar 2010 18:56:16 +0000 Subject: Avoid producing implicit methods when we have a explicit template instantiation declaration. llvm-svn: 99311 --- clang/lib/CodeGen/CodeGenModule.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'clang/lib/CodeGen/CodeGenModule.cpp') diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 1606710..69ce49c 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -310,8 +310,17 @@ GetLinkageForFunction(ASTContext &Context, const FunctionDecl *FD, // instantiated when used so that the body can be considered for // inlining, but that no out-of-line copy of the inline function would be // generated in the translation unit. -- end note ] - if (FD->getTemplateSpecializationKind() - == TSK_ExplicitInstantiationDeclaration) + + // We check the specialization kind of the class for implicit methods. + // They have a TSK_Undeclared specialization kind. + TemplateSpecializationKind TSK; + const CXXMethodDecl *MD = dyn_cast(FD); + if (MD && MD->isImplicit()) + TSK = MD->getParent()->getTemplateSpecializationKind(); + else + TSK = FD->getTemplateSpecializationKind(); + + if (TSK == TSK_ExplicitInstantiationDeclaration) return CodeGenModule::GVA_C99Inline; return CodeGenModule::GVA_CXXInline; -- cgit v1.1