[clang] [C++20] [Modules] [Itanium ABI] Generate the vtable in the module unit of dynamic classes (PR #75912)

David Blaikie via cfe-commits cfe-commits at lists.llvm.org
Mon Apr 1 11:26:37 PDT 2024


================
@@ -1483,10 +1483,15 @@ void ASTDeclWriter::VisitCXXRecordDecl(CXXRecordDecl *D) {
   if (D->isThisDeclarationADefinition())
     Record.AddCXXDefinitionData(D);
 
-  // Store (what we currently believe to be) the key function to avoid
-  // deserializing every method so we can compute it.
-  if (D->isCompleteDefinition())
-    Record.AddDeclRef(Context.getCurrentKeyFunction(D));
+  if (D->isCompleteDefinition()) {
+    if (D->getOwningModule() && D->getOwningModule()->isInterfaceOrPartition())
+      Writer.ModularCodegenDecls.push_back(Writer.GetDeclRef(D));
+    else {
+      // Store (what we currently believe to be) the key function to avoid
----------------
dwblaikie wrote:

Small/isolated patches help with review, reverting, understanding the code in the future etc - please separate things when practical, and this looks like such a case.

Changing the ABI is one thing, then optimizing the key function querying for un-homed vtables seems like a quite different/separate thing (indeed they aren't ordered, even, right? Like either of these changes could be made separately and would stand on their own/be beneficial without the other?)

https://github.com/llvm/llvm-project/pull/75912


More information about the cfe-commits mailing list