aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
-rw-r--r--clang/lib/CodeGen/CodeGenModule.cpp55
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;