================
@@ -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

Reply via email to