summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2010-03-10 02:19:29 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2010-03-10 02:19:29 +0000
commite7113ca907daa9f84992986f005e8ca6e6577481 (patch)
treeda4680799639f5060a4cbf70bcfcce709a1f870d /clang/lib/Sema
parentb7e0b87441a253be7973b1da9abc07a1c7fa68bd (diff)
downloadbcm5719-llvm-e7113ca907daa9f84992986f005e8ca6e6577481.tar.gz
bcm5719-llvm-e7113ca907daa9f84992986f005e8ca6e6577481.zip
Delay codegen of vtables when handling implicit instantiations.
This fixes PR6474. llvm-svn: 98123
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp11
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);
}
OpenPOWER on IntegriCloud