================ @@ -6853,6 +6853,13 @@ void CodeGenModule::EmitTopLevelDecl(Decl *D) { if (ES->hasExternalDefinitions(D) == ExternalASTSource::EK_Never) DI->completeUnusedClass(*CRD); } + // If we're emitting a dynamic class from the importable module we're + // emitting, we always need to emit the virtual table according to the ABI + // requirement. + if (CRD->getDefinition() && CRD->isDynamicClass() && + CRD->isInCurrentModuleUnit()) + EmitVTable(CRD); ---------------- efriedma-quic wrote:
So DefineUsedVTables is called, but the ASTWriter eats the call without actually recording the fact anywhere? Okay, that makes more sense. So I guess that gives a potential alternate approach; we could teach ASTWriter to record the fact that HandleVTable was called, and replay it later. But if we can reliably handle emitting vtables in EmitTopLevelDecl, it's probably simpler to just eliminate HandleVTable. https://github.com/llvm/llvm-project/pull/75912 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits