Delay codegen of vtables when handling implicit instantiations.

This fixes PR6474.

llvm-svn: 98123
This commit is contained in:
Rafael Espindola
2010-03-10 02:19:29 +00:00
parent b7e0b87441
commit e7113ca907
7 changed files with 58 additions and 37 deletions

View File

@@ -488,7 +488,15 @@ void CodeGenModule::EmitDeferred() {
// Emit code for any potentially referenced deferred decls. Since a
// previously unused static decl may become used during the generation of code
// for a static function, iterate until no changes are made.
while (!DeferredDeclsToEmit.empty()) {
while (!DeferredDeclsToEmit.empty() || !DeferredVtables.empty()) {
if (!DeferredVtables.empty()) {
const CXXRecordDecl *RD = DeferredVtables.back();
DeferredVtables.pop_back();
getVtableInfo().GenerateClassData(getVtableLinkage(RD), RD);
continue;
}
GlobalDecl D = DeferredDeclsToEmit.back();
DeferredDeclsToEmit.pop_back();