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:
parent
df8b37c3f8
commit
4f22b4b1c7
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue