diff options
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 55 |
1 files changed, 2 insertions, 53 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index e282bc8..56ed59d 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -136,13 +136,6 @@ CodeGenModule::CodeGenModule(ASTContext &C, const HeaderSearchOptions &HSO, GlobalsInt8PtrTy = Int8Ty->getPointerTo(DL.getDefaultGlobalsAddressSpace()); ASTAllocaAddressSpace = getTargetCodeGenInfo().getASTAllocaAddressSpace(); - // Build C++20 Module initializers. - // TODO: Add Microsoft here once we know the mangling required for the - // initializers. - CXX20ModuleInits = - LangOpts.CPlusPlusModules && getCXXABI().getMangleContext().getKind() == - ItaniumMangleContext::MK_Itanium; - RuntimeCC = getTargetCodeGenInfo().getABIInfo().getRuntimeCC(); if (LangOpts.ObjC) @@ -516,18 +509,12 @@ static void setVisibilityFromDLLStorageClass(const clang::LangOptions &LO, } void CodeGenModule::Release() { - Module *Primary = getContext().getModuleForCodeGen(); - if (CXX20ModuleInits && Primary) - EmitModuleInitializers(Primary); EmitDeferred(); EmitVTablesOpportunistically(); applyGlobalValReplacements(); applyReplacements(); emitMultiVersionFunctions(); - if (CXX20ModuleInits && Primary && Primary->isInterfaceOrPartition()) - EmitCXXModuleInitFunc(Primary); - else - EmitCXXGlobalInitFunc(); + EmitCXXGlobalInitFunc(); EmitCXXGlobalCleanUpFunc(); registerGlobalDtorsWithAtExit(); EmitCXXThreadLocalInitFunc(); @@ -2504,31 +2491,6 @@ static void addLinkOptionsPostorder(CodeGenModule &CGM, Module *Mod, } } -void CodeGenModule::EmitModuleInitializers(clang::Module *Primary) { - // Emit the initializers in the order that sub-modules appear in the - // source, first Global Module Fragments, if present. - if (auto GMF = Primary->getGlobalModuleFragment()) { - for (Decl *D : getContext().getModuleInitializers(GMF)) { - assert(D->getKind() == Decl::Var && "GMF initializer decl is not a var?"); - EmitTopLevelDecl(D); - } - } - // Second any associated with the module, itself. - for (Decl *D : getContext().getModuleInitializers(Primary)) { - // Skip import decls, the inits for those are called explicitly. - if (D->getKind() == Decl::Import) - continue; - EmitTopLevelDecl(D); - } - // Third any associated with the Privat eMOdule Fragment, if present. - if (auto PMF = Primary->getPrivateModuleFragment()) { - for (Decl *D : getContext().getModuleInitializers(PMF)) { - assert(D->getKind() == Decl::Var && "PMF initializer decl is not a var?"); - EmitTopLevelDecl(D); - } - } -} - void CodeGenModule::EmitModuleLinkOptions() { // Collect the set of all of the modules we want to visit to emit link // options, which is essentially the imported modules and all of their @@ -2934,19 +2896,12 @@ bool CodeGenModule::MayBeEmittedEagerly(const ValueDecl *Global) { // explicitly instantiated, so they should not be emitted eagerly. return false; } - if (const auto *VD = dyn_cast<VarDecl>(Global)) { + if (const auto *VD = dyn_cast<VarDecl>(Global)) if (Context.getInlineVariableDefinitionKind(VD) == ASTContext::InlineVariableDefinitionKind::WeakUnknown) // A definition of an inline constexpr static data member may change // linkage later if it's redeclared outside the class. return false; - if (CXX20ModuleInits && VD->getOwningModule()) { - // For CXX20, module-owned initializers need to be deferred, since it is - // not known at this point if they will be run for the current module or - // as part of the initializer for an imported one. - return false; - } - } // If OpenMP is enabled and threadprivates must be generated like TLS, delay // codegen for global variables, because they may be marked as threadprivate. if (LangOpts.OpenMP && LangOpts.OpenMPUseTLS && @@ -6243,12 +6198,6 @@ void CodeGenModule::EmitTopLevelDecl(Decl *D) { DI->EmitImportDecl(*Import); } - // For CXX20 we are done - we will call the module initializer for the - // imported module, and that will likewise call those for any imports it - // has. - if (CXX20ModuleInits) - break; - // Find all of the submodules and emit the module initializers. llvm::SmallPtrSet<clang::Module *, 16> Visited; SmallVector<clang::Module *, 16> Stack; |