diff options
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index a89f355147f..79cab15e691 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -5902,10 +5902,13 @@ void Sema::MaybeMarkVirtualMembersReferenced(SourceLocation Loc, // We will need to mark all of the virtual members as referenced to build the // vtable. - // We actually call MarkVirtualMembersReferenced instead of adding to - // ClassesWithUnmarkedVirtualMembers because this marking is needed by - // codegen that will happend before we finish parsing the file. - if (needsVtable(MD, Context)) + if (!needsVtable(MD, Context)) + return; + + TemplateSpecializationKind kind = RD->getTemplateSpecializationKind(); + if (kind == TSK_ImplicitInstantiation) + ClassesWithUnmarkedVirtualMembers.push_back(std::make_pair(RD, Loc)); + else MarkVirtualMembersReferenced(Loc, RD); } |