From 39cfde236693a928ff6594ddc321c4550237cfaa Mon Sep 17 00:00:00 2001 From: Chuanqi Xu Date: Tue, 2 Aug 2022 11:08:41 +0800 Subject: [PATCH] Revert "[C++20] [Modules] Handle initializer for Header Units" This reverts commit db6152ad66d7cf48f9f5c3eb28bf54c092978773. This commit fails in ppc64. Since we want to backport it to 15.x. So revert it now to keep the patch complete. --- clang/lib/CodeGen/CGDeclCXX.cpp | 8 +++--- clang/lib/CodeGen/CodeGenModule.cpp | 10 +++---- .../test/CodeGenCXX/module-initializer-header.cppm | 31 ---------------------- 3 files changed, 8 insertions(+), 41 deletions(-) delete mode 100644 clang/test/CodeGenCXX/module-initializer-header.cppm diff --git a/clang/lib/CodeGen/CGDeclCXX.cpp b/clang/lib/CodeGen/CGDeclCXX.cpp index 4201413..620af1e 100644 --- a/clang/lib/CodeGen/CGDeclCXX.cpp +++ b/clang/lib/CodeGen/CGDeclCXX.cpp @@ -650,8 +650,8 @@ void CodeGenModule::EmitCXXModuleInitFunc(Module *Primary) { SmallVector ModuleInits; for (Module *M : AllImports) { - // No Itanium initializer in header like modules. - if (M->isHeaderLikeModule()) + // No Itanium initializer in module map modules. + if (M->isModuleMapModule()) continue; // TODO: warn of mixed use of module map modules and C++20? llvm::FunctionType *FTy = llvm::FunctionType::get(VoidTy, false); SmallString<256> FnName; @@ -779,8 +779,8 @@ CodeGenModule::EmitCXXGlobalInitFunc() { SmallVector ModuleInits; if (CXX20ModuleInits) for (Module *M : ImportedModules) { - // No Itanium initializer in header like modules. - if (M->isHeaderLikeModule()) + // No Itanium initializer in module map modules. + if (M->isModuleMapModule()) continue; llvm::FunctionType *FTy = llvm::FunctionType::get(VoidTy, false); SmallString<256> FnName; diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index dc1122f..579ebba 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -521,7 +521,7 @@ static void setVisibilityFromDLLStorageClass(const clang::LangOptions &LO, void CodeGenModule::Release() { Module *Primary = getContext().getModuleForCodeGen(); - if (CXX20ModuleInits && Primary && !Primary->isHeaderLikeModule()) + if (CXX20ModuleInits && Primary && !Primary->isModuleMapModule()) EmitModuleInitializers(Primary); EmitDeferred(); DeferredDecls.insert(EmittedDeferredDecls.begin(), @@ -2521,23 +2521,21 @@ void CodeGenModule::EmitModuleInitializers(clang::Module *Primary) { // source, first Global Module Fragments, if present. if (auto GMF = Primary->getGlobalModuleFragment()) { for (Decl *D : getContext().getModuleInitializers(GMF)) { - if (isa(D)) - continue; - assert(isa(D) && "GMF initializer decl is not a var?"); + 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 (isa(D)) + 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(isa(D) && "PMF initializer decl is not a var?"); + assert(D->getKind() == Decl::Var && "PMF initializer decl is not a var?"); EmitTopLevelDecl(D); } } diff --git a/clang/test/CodeGenCXX/module-initializer-header.cppm b/clang/test/CodeGenCXX/module-initializer-header.cppm deleted file mode 100644 index d60ad45..0000000 --- a/clang/test/CodeGenCXX/module-initializer-header.cppm +++ /dev/null @@ -1,31 +0,0 @@ -// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py -// RUN: rm -rf %t -// RUN: split-file %s %t -// -// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple -xc++-user-header -emit-header-unit %t/header.h -o %t/header.pcm -// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple -fmodule-file=%t/header.pcm %t/M.cppm -S -emit-llvm -o - | FileCheck %t/M.cppm -// RUN: %clang_cc1 -std=c++20 -triple %itanium_abi_triple -fmodule-file=%t/header.pcm %t/Use.cpp -S -emit-llvm -o - | FileCheck %t/Use.cpp -// -//--- header.h -int foo(); -int i = foo(); - -//--- M.cppm -module; -import "header.h"; -export module M; - -// CHECK: @i = {{.*}}global i32 0 -// CHECK: void @__cxx_global_var_init() -// CHECK-NEXT: entry: -// CHECK-NEXT: %call = call noundef i32 @_Z3foov() -// CHECK-NEXT: store i32 %call, ptr @i - -//--- Use.cpp -import "header.h"; - -// CHECK: @i = {{.*}}global i32 0 -// CHECK: void @__cxx_global_var_init() -// CHECK-NEXT: entry: -// CHECK-NEXT: %call = call noundef i32 @_Z3foov() -// CHECK-NEXT: store i32 %call, ptr @i -- 2.7.4