When handling a TSK_ExplicitInstantiationDefinition after a

TSK_ExplicitInstantiationDeclaration make sure we call
MaybeMarkVirtualMembersReferenced with a method attached to the definition.

Remove the hack that forced vtable emition with declarations.

llvm-svn: 99174
This commit is contained in:
Rafael Espindola 2010-03-22 14:43:41 +00:00
parent df8b37c3f8
commit 4f22b4b1c7
2 changed files with 6 additions and 2 deletions

View File

@ -5889,7 +5889,7 @@ static bool needsVtable(CXXMethodDecl *MD, ASTContext &Context) {
break;
case TSK_ExplicitInstantiationDeclaration:
return true; //FIXME: This looks wrong.
return false;
case TSK_ExplicitInstantiationDefinition:
// This is method of a explicit instantiation; mark all of the virtual

View File

@ -4388,8 +4388,12 @@ Sema::ActOnExplicitInstantiation(Scope *S,
// Instantiate the members of this class template specialization.
Def = cast_or_null<ClassTemplateSpecializationDecl>(
Specialization->getDefinition());
if (Def)
if (Def) {
// Fix a TSK_ExplicitInstantiationDeclaration followed by a
// TSK_ExplicitInstantiationDefinition
Def->setTemplateSpecializationKind(TSK);
InstantiateClassTemplateSpecializationMembers(TemplateNameLoc, Def, TSK);
}
return DeclPtrTy::make(Specialization);
}