[clang] 39cfde2 - Revert "[C++20] [Modules] Handle initializer for Header Units"

Chuanqi Xu via cfe-commits cfe-commits at lists.llvm.org
Mon Aug 1 20:10:03 PDT 2022


Author: Chuanqi Xu
Date: 2022-08-02T11:09:38+08:00
New Revision: 39cfde236693a928ff6594ddc321c4550237cfaa

URL: https://github.com/llvm/llvm-project/commit/39cfde236693a928ff6594ddc321c4550237cfaa
DIFF: https://github.com/llvm/llvm-project/commit/39cfde236693a928ff6594ddc321c4550237cfaa.diff

LOG: 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.

Added: 
    

Modified: 
    clang/lib/CodeGen/CGDeclCXX.cpp
    clang/lib/CodeGen/CodeGenModule.cpp

Removed: 
    clang/test/CodeGenCXX/module-initializer-header.cppm


################################################################################
diff  --git a/clang/lib/CodeGen/CGDeclCXX.cpp b/clang/lib/CodeGen/CGDeclCXX.cpp
index 420141362f0e..620af1e633b7 100644
--- a/clang/lib/CodeGen/CGDeclCXX.cpp
+++ b/clang/lib/CodeGen/CGDeclCXX.cpp
@@ -650,8 +650,8 @@ void CodeGenModule::EmitCXXModuleInitFunc(Module *Primary) {
 
   SmallVector<llvm::Function *, 8> 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<llvm::Function *, 8> 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 dc1122f3ab67..579ebba7736d 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<ImportDecl>(D))
-        continue;
-      assert(isa<VarDecl>(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<ImportDecl>(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<VarDecl>(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 d60ad45a0ab3..000000000000
--- 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  


        


More information about the cfe-commits mailing list