================ @@ -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); ---------------- ChuanqiXu9 wrote:
Yes, this can happen with the two phase compilation of modules (https://clang.llvm.org/docs/StandardCPlusPlusModules.html#how-to-produce-a-bmi). Which will compile a `.cppm` file to a `.pcm` file, and we will compile the `.pcm` file the `.o` file. The one phase compilation can also happen for modules. 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