diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-03-10 02:19:29 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-03-10 02:19:29 +0000 |
| commit | e7113ca907daa9f84992986f005e8ca6e6577481 (patch) | |
| tree | da4680799639f5060a4cbf70bcfcce709a1f870d /clang/lib/Sema | |
| parent | b7e0b87441a253be7973b1da9abc07a1c7fa68bd (diff) | |
| download | bcm5719-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.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); } |

