[clang] [clang-tools-extra] [clang][modules] Deprecate module.map in favor of module.modulemap (PR #75142)

via cfe-commits cfe-commits at lists.llvm.org
Mon Dec 11 21:58:53 PST 2023


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-modules

@llvm/pr-subscribers-clangd

Author: Michael Spencer (Bigcheese)

<details>
<summary>Changes</summary>

This patch deprecates `module.map` in favor of `module.modulemap`, which has been the preferred form since 2014. The eventual goal is to remove support for `module.map` to reduce the number of stats Clang needs to do while searching for module map files.

This patch touches a lot of files, but the majority of them are just renaming tests or references to the file in comments or documentation.

The relevant files are:
* lib/Lex/HeaderSearch.cpp
* include/clang/Basic/DiagnosticGroups.td
* include/clang/Basic/DiagnosticLexKinds.td

---

Patch is 108.34 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/75142.diff


142 Files Affected:

- (modified) clang-tools-extra/clangd/unittests/SymbolCollectorTests.cpp (+2-2) 
- (modified) clang-tools-extra/docs/modularize.rst (+1-1) 
- (renamed) clang-tools-extra/include-cleaner/test/Inputs/modules/module.modulemap () 
- (modified) clang-tools-extra/modularize/Modularize.cpp (+6-6) 
- (modified) clang-tools-extra/modularize/ModularizeUtilities.cpp (+2-2) 
- (modified) clang-tools-extra/modularize/ModularizeUtilities.h (+2-2) 
- (modified) clang-tools-extra/test/modularize/Inputs/CompileError/module.modulemap (+1-1) 
- (modified) clang-tools-extra/test/modularize/Inputs/CoverageNoProblems/module.modulemap (+1-1) 
- (modified) clang-tools-extra/test/modularize/Inputs/CoverageProblems/module.modulemap (+1-1) 
- (modified) clang-tools-extra/test/modularize/Inputs/MissingHeader/module.modulemap (+1-1) 
- (renamed) clang-tools-extra/test/pp-trace/Inputs/module.modulemap (+1-1) 
- (modified) clang/include/clang-c/BuildSystem.h (+3-3) 
- (modified) clang/include/clang/Basic/DiagnosticGroups.td (+1) 
- (modified) clang/include/clang/Basic/DiagnosticLexKinds.td (+3) 
- (modified) clang/lib/Lex/HeaderSearch.cpp (+17-5) 
- (renamed) clang/test/ARCMT/Inputs/module.modulemap () 
- (renamed) clang/test/Index/Inputs/Frameworks/module.modulemap () 
- (renamed) clang/test/Index/Inputs/Headers/module.modulemap () 
- (renamed) clang/test/Index/Inputs/Headers/nested/module.modulemap () 
- (renamed) clang/test/Index/Inputs/module.modulemap () 
- (modified) clang/test/Index/Inputs/vfsoverlay.yaml (+2-2) 
- (renamed) clang/test/Modules/Inputs/Conflicts/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.private.modulemap () 
- (renamed) clang/test/Modules/Inputs/GNUAsm/NeedsGNUInlineAsm.framework/Modules/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/Modified/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/ModuleDiags/module.modulemap () 
- (added) clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/a.h (+1) 
- (added) clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/module.map (+3) 
- (added) clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/module_private.map (+3) 
- (added) clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/private.h () 
- (added) clang/test/Modules/Inputs/ModuleMapLocations/Module_Map_F.framework/Headers/a.h () 
- (added) clang/test/Modules/Inputs/ModuleMapLocations/Module_Map_F.framework/PrivateHeaders/private.h () 
- (added) clang/test/Modules/Inputs/ModuleMapLocations/Module_Map_F.framework/module.map (+3) 
- (added) clang/test/Modules/Inputs/ModuleMapLocations/Module_Map_F.framework/module_private.map (+3) 
- (renamed) clang/test/Modules/Inputs/NoUmbrella.framework/Modules/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/NoUmbrella.framework/Modules/module.private.modulemap () 
- (renamed) clang/test/Modules/Inputs/StdDef/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/System/usr/include/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/UseAfterFree/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/UseAfterFree/module.private.modulemap () 
- (renamed) clang/test/Modules/Inputs/crash-recovery/usr/include/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/declare-use/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/elsewhere/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/exclude-header/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/implicit-private-without-public/DeprecatedModuleMapLocation.framework/module.private.modulemap () 
- (renamed) clang/test/Modules/Inputs/include-relative/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/lookup-assert-protocol/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/lookup-assert/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/macro-undef-through-pch/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/malformed/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/ms-enums/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/normal-module-map/Umbrella/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/normal-module-map/Umbrella2/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/normal-module-map/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/normal-module-map/nested/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/objc-category-2/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/objc-category-3/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/objc-category/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/objc-hidden/System/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/odr/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/oldname/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/pr19692/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/private/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/private1/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/private2/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/redecls/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/self-import-header/af.framework/Modules/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/self-import-header/depend_builtin/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/string_names/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/subdir/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/subdirectory-module-maps-working-dir/subdir_module/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/submodules/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/system-out-of-date/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/template-specialization-visibility/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/thread-safety/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/undefined-type-fixit/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/unnecessary-module-map-parsing/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/update-after-load/module.modulemap () 
- (renamed) clang/test/Modules/Inputs/wildcard-submodule-exports/module.modulemap () 
- (modified) clang/test/Modules/concept_differ.cpp (+2-2) 
- (modified) clang/test/Modules/config_macros.m (+1-1) 
- (modified) clang/test/Modules/crash-vfs-ivfsoverlay.m (+1-1) 
- (modified) clang/test/Modules/crash-vfs-path-symlink-component.m (+2-2) 
- (modified) clang/test/Modules/crash-vfs-path-traversal.m (+2-2) 
- (modified) clang/test/Modules/crash-vfs-relative-incdir.m (+2-2) 
- (modified) clang/test/Modules/crash-vfs-relative-overlay.m (+2-2) 
- (modified) clang/test/Modules/crash-vfs-run-reproducer.m (+2-2) 
- (modified) clang/test/Modules/declare-use-compatible.cpp (+4-4) 
- (modified) clang/test/Modules/dependency-gen-pch.m (+1-1) 
- (modified) clang/test/Modules/dependency-gen.m (+4-4) 
- (modified) clang/test/Modules/diag-flags.cpp (+6-6) 
- (modified) clang/test/Modules/diag-pragma.c (+1-1) 
- (modified) clang/test/Modules/diag-pragma.cpp (+2-2) 
- (modified) clang/test/Modules/diamond-pch.c (+4-4) 
- (modified) clang/test/Modules/diamond.c (+4-4) 
- (modified) clang/test/Modules/extern_c_bad.cpp (+1-1) 
- (modified) clang/test/Modules/fmodules-validate-once-per-build-session.c (+3-3) 
- (modified) clang/test/Modules/fsystem-module.m (+3-3) 
- (modified) clang/test/Modules/irgen.c (+1-1) 
- (modified) clang/test/Modules/linkage-merge.m (+1-1) 
- (modified) clang/test/Modules/load_failure.c (+1-1) 
- (modified) clang/test/Modules/lookup.cpp (+2-2) 
- (modified) clang/test/Modules/lookup.m (+2-2) 
- (modified) clang/test/Modules/merge-concepts.cppm (+6-6) 
- (modified) clang/test/Modules/missing-header.m (+1-1) 
- (modified) clang/test/Modules/modify-module.m (+1-1) 
- (modified) clang/test/Modules/module-file-home-is-cwd.m (+3-3) 
- (modified) clang/test/Modules/module-private.cpp (+2-2) 
- (modified) clang/test/Modules/module_file_info.m (+4-4) 
- (modified) clang/test/Modules/modulemap-locations.m (+4) 
- (modified) clang/test/Modules/no-stale-modtime.m (+3-3) 
- (modified) clang/test/Modules/objc-at-keyword.m (+2-2) 
- (modified) clang/test/Modules/objc-categories.m (+5-5) 
- (modified) clang/test/Modules/objc-type-param.m (+1-1) 
- (modified) clang/test/Modules/objc_redef.m (+2-2) 
- (modified) clang/test/Modules/odr_hash-blocks.cpp (+6-6) 
- (modified) clang/test/Modules/odr_hash-gnu.cpp (+6-6) 
- (modified) clang/test/Modules/odr_hash-vector.cpp (+6-6) 
- (modified) clang/test/Modules/odr_hash.cl (+6-6) 
- (modified) clang/test/Modules/odr_hash.cpp (+6-6) 
- (modified) clang/test/Modules/odr_hash.mm (+6-6) 
- (modified) clang/test/Modules/pragma-pack.cpp (+2-2) 
- (modified) clang/test/Modules/recursive.c (+1-1) 
- (modified) clang/test/Modules/redecl-namespaces.mm (+2-2) 
- (modified) clang/test/Modules/redeclarations.m (+2-2) 
- (modified) clang/test/Modules/relative-submodule-topheader.m (+1-1) 
- (modified) clang/test/Modules/requires-coroutines.mm (+1-1) 
- (modified) clang/test/Modules/requires-gnuinlineasm.m (+1-1) 
- (modified) clang/test/Modules/requires.m (+15-15) 
- (modified) clang/test/Modules/requires.mm (+2-2) 
- (modified) clang/test/Modules/target-platform-features.m (+32-32) 
- (modified) clang/test/Modules/timestamps.c (+1-1) 
- (modified) clang/test/Modules/validate-system-headers.m (+1-1) 
- (modified) clang/test/PCH/modified-module-dependency.m (+1-1) 
- (modified) clang/test/Preprocessor/pragma_module.c (+4-4) 
- (renamed) clang/test/SemaObjC/Inputs/module.modulemap () 
- (modified) clang/test/VFS/Inputs/vfsoverlay.yaml (+1-1) 
- (modified) clang/test/VFS/Inputs/vfsoverlay2.yaml (+1-1) 
- (modified) clang/test/VFS/test_nonmodular.c (+1-1) 
- (modified) clang/unittests/Tooling/ToolingTest.cpp (+5-5) 


``````````diff
diff --git a/clang-tools-extra/clangd/unittests/SymbolCollectorTests.cpp b/clang-tools-extra/clangd/unittests/SymbolCollectorTests.cpp
index f12441061c1983..9cdc57ec01f327 100644
--- a/clang-tools-extra/clangd/unittests/SymbolCollectorTests.cpp
+++ b/clang-tools-extra/clangd/unittests/SymbolCollectorTests.cpp
@@ -1917,14 +1917,14 @@ TEST_F(SymbolCollectorTest, UndefOfModuleMacro) {
     #undef X
     )cpp";
   TU.AdditionalFiles["foo.h"] = "#define X 1";
-  TU.AdditionalFiles["module.map"] = R"cpp(
+  TU.AdditionalFiles["module.modulemap"] = R"cpp(
     module foo {
      header "foo.h"
      export *
    }
    )cpp";
   TU.ExtraArgs.push_back("-fmodules");
-  TU.ExtraArgs.push_back("-fmodule-map-file=" + testPath("module.map"));
+  TU.ExtraArgs.push_back("-fmodule-map-file=" + testPath("module.modulemap"));
   TU.OverlayRealFileSystemForModules = true;
 
   TU.build();
diff --git a/clang-tools-extra/docs/modularize.rst b/clang-tools-extra/docs/modularize.rst
index 9dde467ec30847..64ca8c99d4e8ef 100644
--- a/clang-tools-extra/docs/modularize.rst
+++ b/clang-tools-extra/docs/modularize.rst
@@ -20,7 +20,7 @@ map.
 :program:`modularize` also has an assistant mode option for generating
 a module map file based on the provided header list. The generated file
 is a functional module map that can be used as a starting point for a
-module.map file.
+module.modulemap file.
 
 Getting Started
 ===============
diff --git a/clang-tools-extra/include-cleaner/test/Inputs/modules/module.map b/clang-tools-extra/include-cleaner/test/Inputs/modules/module.modulemap
similarity index 100%
rename from clang-tools-extra/include-cleaner/test/Inputs/modules/module.map
rename to clang-tools-extra/include-cleaner/test/Inputs/modules/module.modulemap
diff --git a/clang-tools-extra/modularize/Modularize.cpp b/clang-tools-extra/modularize/Modularize.cpp
index daa9c048279e03..f3e7dfc20b027d 100644
--- a/clang-tools-extra/modularize/Modularize.cpp
+++ b/clang-tools-extra/modularize/Modularize.cpp
@@ -51,20 +51,20 @@
 //          to the header list file directory.  Use -prefix to specify a
 //          different directory.
 //    -module-map-path=(module map)
-//          Skip the checks, and instead act as a module.map generation
+//          Skip the checks, and instead act as a module.modulemap generation
 //          assistant, generating a module map file based on the header list.
 //          An optional "-root-module=(rootName)" argument can specify a root
-//          module to be created in the generated module.map file.  Note that
-//          you will likely need to edit this file to suit the needs of your
-//          headers.
+//          module to be created in the generated module.modulemap file.  Note
+//          that you will likely need to edit this file to suit the needs of
+//          your headers.
 //    -problem-files-list=(problem files list file name)
 //          For use only with module map assistant.  Input list of files that
 //          have problems with respect to modules.  These will still be
 //          included in the generated module map, but will be marked as
 //          "excluded" headers.
 //    -root-module=(root module name)
-//          Specifies a root module to be created in the generated module.map
-//          file.
+//          Specifies a root module to be created in the generated
+//          module.modulemap file.
 //    -block-check-header-list-only
 //          Only warn if #include directives are inside extern or namespace
 //          blocks if the included header is in the header list.
diff --git a/clang-tools-extra/modularize/ModularizeUtilities.cpp b/clang-tools-extra/modularize/ModularizeUtilities.cpp
index 089f52f52ec4d3..e65f711249e3f5 100644
--- a/clang-tools-extra/modularize/ModularizeUtilities.cpp
+++ b/clang-tools-extra/modularize/ModularizeUtilities.cpp
@@ -103,10 +103,10 @@ std::error_code ModularizeUtilities::loadAllHeaderListsAndDependencies() {
 
 // Do coverage checks.
 // For each loaded module map, do header coverage check.
-// Starting from the directory of the module.map file,
+// Starting from the directory of the module.modulemap file,
 // Find all header files, optionally looking only at files
 // covered by the include path options, and compare against
-// the headers referenced by the module.map file.
+// the headers referenced by the module.modulemap file.
 // Display warnings for unaccounted-for header files.
 // Returns 0 if there were no errors or warnings, 1 if there
 // were warnings, 2 if any other problem, such as a bad
diff --git a/clang-tools-extra/modularize/ModularizeUtilities.h b/clang-tools-extra/modularize/ModularizeUtilities.h
index 6da15e42f1f1ea..64675022dad76e 100644
--- a/clang-tools-extra/modularize/ModularizeUtilities.h
+++ b/clang-tools-extra/modularize/ModularizeUtilities.h
@@ -89,10 +89,10 @@ class ModularizeUtilities {
 
   /// Do coverage checks.
   /// For each loaded module map, do header coverage check.
-  /// Starting from the directory of the module.map file,
+  /// Starting from the directory of the module.modulemap file,
   /// Find all header files, optionally looking only at files
   /// covered by the include path options, and compare against
-  /// the headers referenced by the module.map file.
+  /// the headers referenced by the module.modulemap file.
   /// Display warnings for unaccounted-for header files.
   /// \param IncludePaths The include paths to check for files.
   ///   (Note that other directories above these paths are ignored.
diff --git a/clang-tools-extra/test/modularize/Inputs/CompileError/module.modulemap b/clang-tools-extra/test/modularize/Inputs/CompileError/module.modulemap
index fbb8e7db4d10c2..64180adf5beb35 100644
--- a/clang-tools-extra/test/modularize/Inputs/CompileError/module.modulemap
+++ b/clang-tools-extra/test/modularize/Inputs/CompileError/module.modulemap
@@ -1,4 +1,4 @@
-// module.map
+// module.modulemap
 
 module Level1A {
   header "Level1A.h"
diff --git a/clang-tools-extra/test/modularize/Inputs/CoverageNoProblems/module.modulemap b/clang-tools-extra/test/modularize/Inputs/CoverageNoProblems/module.modulemap
index d2b0957b76e1ca..39af7d5dcf366e 100644
--- a/clang-tools-extra/test/modularize/Inputs/CoverageNoProblems/module.modulemap
+++ b/clang-tools-extra/test/modularize/Inputs/CoverageNoProblems/module.modulemap
@@ -1,4 +1,4 @@
-// module.map
+// module.modulemap
 
 module Level1A {
   header "Includes1/Level1A.h"
diff --git a/clang-tools-extra/test/modularize/Inputs/CoverageProblems/module.modulemap b/clang-tools-extra/test/modularize/Inputs/CoverageProblems/module.modulemap
index dbe0bb8507cf0b..2b8b23054a0195 100644
--- a/clang-tools-extra/test/modularize/Inputs/CoverageProblems/module.modulemap
+++ b/clang-tools-extra/test/modularize/Inputs/CoverageProblems/module.modulemap
@@ -1,4 +1,4 @@
-// module.map
+// module.modulemap
 
 module Level1A {
   header "Level1A.h"
diff --git a/clang-tools-extra/test/modularize/Inputs/MissingHeader/module.modulemap b/clang-tools-extra/test/modularize/Inputs/MissingHeader/module.modulemap
index daa06fca78d26b..9acb4923f9ac37 100644
--- a/clang-tools-extra/test/modularize/Inputs/MissingHeader/module.modulemap
+++ b/clang-tools-extra/test/modularize/Inputs/MissingHeader/module.modulemap
@@ -1,4 +1,4 @@
-// module.map
+// module.modulemap
 
 module Level1A {
   header "Level1A.h"
diff --git a/clang-tools-extra/test/pp-trace/Inputs/module.map b/clang-tools-extra/test/pp-trace/Inputs/module.modulemap
similarity index 84%
rename from clang-tools-extra/test/pp-trace/Inputs/module.map
rename to clang-tools-extra/test/pp-trace/Inputs/module.modulemap
index 31f33c5bb14902..f16bbc6e2e05b4 100644
--- a/clang-tools-extra/test/pp-trace/Inputs/module.map
+++ b/clang-tools-extra/test/pp-trace/Inputs/module.modulemap
@@ -1,4 +1,4 @@
-// module.map
+// module.modulemap
 
 module Level1A {
   header "Level1A.h"
diff --git a/clang/include/clang-c/BuildSystem.h b/clang/include/clang-c/BuildSystem.h
index 296e61247cef57..57e16af20a7006 100644
--- a/clang/include/clang-c/BuildSystem.h
+++ b/clang/include/clang-c/BuildSystem.h
@@ -95,7 +95,7 @@ CINDEX_LINKAGE void clang_free(void *buffer);
 CINDEX_LINKAGE void clang_VirtualFileOverlay_dispose(CXVirtualFileOverlay);
 
 /**
- * Object encapsulating information about a module.map file.
+ * Object encapsulating information about a module.modulemap file.
  */
 typedef struct CXModuleMapDescriptorImpl *CXModuleMapDescriptor;
 
@@ -109,7 +109,7 @@ CINDEX_LINKAGE CXModuleMapDescriptor
 clang_ModuleMapDescriptor_create(unsigned options);
 
 /**
- * Sets the framework module name that the module.map describes.
+ * Sets the framework module name that the module.modulemap describes.
  * \returns 0 for success, non-zero to indicate an error.
  */
 CINDEX_LINKAGE enum CXErrorCode
@@ -117,7 +117,7 @@ clang_ModuleMapDescriptor_setFrameworkModuleName(CXModuleMapDescriptor,
                                                  const char *name);
 
 /**
- * Sets the umbrella header name that the module.map describes.
+ * Sets the umbrella header name that the module.modulemap describes.
  * \returns 0 for success, non-zero to indicate an error.
  */
 CINDEX_LINKAGE enum CXErrorCode
diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td
index caee2dc6daadb6..80b5680b94f6ca 100644
--- a/clang/include/clang/Basic/DiagnosticGroups.td
+++ b/clang/include/clang/Basic/DiagnosticGroups.td
@@ -40,6 +40,7 @@ def : DiagGroup<"auto-import">;
 def FrameworkHdrQuotedInclude : DiagGroup<"quoted-include-in-framework-header">;
 def FrameworkIncludePrivateFromPublic :
   DiagGroup<"framework-include-private-from-public">;
+def DeprecatedModuleDotMap : DiagGroup<"deprecated-module-dot-map">;
 def FrameworkHdrAtImport : DiagGroup<"atimport-in-framework-header">;
 def CXX14BinaryLiteral : DiagGroup<"c++14-binary-literal">;
 def CXXPre14CompatBinaryLiteral : DiagGroup<"c++98-c++11-compat-binary-literal">;
diff --git a/clang/include/clang/Basic/DiagnosticLexKinds.td b/clang/include/clang/Basic/DiagnosticLexKinds.td
index 564ca48cc32ac5..75ca2fa16d3485 100644
--- a/clang/include/clang/Basic/DiagnosticLexKinds.td
+++ b/clang/include/clang/Basic/DiagnosticLexKinds.td
@@ -884,6 +884,9 @@ def warn_quoted_include_in_framework_header : Warning<
 def warn_framework_include_private_from_public : Warning<
   "public framework header includes private framework header '%0'"
   >, InGroup<FrameworkIncludePrivateFromPublic>;
+def warn_deprecated_module_dot_map : Warning<
+  "'%0' as a module map name is deprecated, rename it to %select{module.modulemap|module.private.modulemap}1%select{| in the 'Modules' directory of the framework}2">,
+  InGroup<DeprecatedModuleDotMap>;
 
 def remark_pp_include_directive_modular_translation : Remark<
   "treating #%select{include|import|include_next|__include_macros}0 as an "
diff --git a/clang/lib/Lex/HeaderSearch.cpp b/clang/lib/Lex/HeaderSearch.cpp
index c03cf19688d961..bf619bb1bb8300 100644
--- a/clang/lib/Lex/HeaderSearch.cpp
+++ b/clang/lib/Lex/HeaderSearch.cpp
@@ -1656,7 +1656,8 @@ bool HeaderSearch::findUsableModuleForFrameworkHeader(
 }
 
 static OptionalFileEntryRef getPrivateModuleMap(FileEntryRef File,
-                                                FileManager &FileMgr) {
+                                                FileManager &FileMgr,
+                                                DiagnosticsEngine &Diags) {
   StringRef Filename = llvm::sys::path::filename(File.getName());
   SmallString<128>  PrivateFilename(File.getDir().getName());
   if (Filename == "module.map")
@@ -1665,7 +1666,14 @@ static OptionalFileEntryRef getPrivateModuleMap(FileEntryRef File,
     llvm::sys::path::append(PrivateFilename, "module.private.modulemap");
   else
     return std::nullopt;
-  return FileMgr.getOptionalFileRef(PrivateFilename);
+  auto PMMFile = FileMgr.getOptionalFileRef(PrivateFilename);
+  if (PMMFile) {
+    if (Filename == "module.map")
+      Diags.Report(diag::warn_deprecated_module_dot_map)
+          << PrivateFilename << 1
+          << File.getDir().getName().endswith(".framework");
+  }
+  return PMMFile;
 }
 
 bool HeaderSearch::loadModuleMapFile(FileEntryRef File, bool IsSystem,
@@ -1731,7 +1739,8 @@ HeaderSearch::loadModuleMapFileImpl(FileEntryRef File, bool IsSystem,
   }
 
   // Try to load a corresponding private module map.
-  if (OptionalFileEntryRef PMMFile = getPrivateModuleMap(File, FileMgr)) {
+  if (OptionalFileEntryRef PMMFile =
+          getPrivateModuleMap(File, FileMgr, Diags)) {
     if (ModMap.parseModuleMapFile(*PMMFile, IsSystem, Dir)) {
       LoadedModuleMaps[File] = false;
       return LMM_InvalidModuleMap;
@@ -1755,11 +1764,14 @@ HeaderSearch::lookupModuleMapFile(DirectoryEntryRef Dir, bool IsFramework) {
   if (auto F = FileMgr.getOptionalFileRef(ModuleMapFileName))
     return *F;
 
-  // Continue to allow module.map
+  // Continue to allow module.map, but warn it's deprecated.
   ModuleMapFileName = Dir.getName();
   llvm::sys::path::append(ModuleMapFileName, "module.map");
-  if (auto F = FileMgr.getOptionalFileRef(ModuleMapFileName))
+  if (auto F = FileMgr.getOptionalFileRef(ModuleMapFileName)) {
+    Diags.Report(diag::warn_deprecated_module_dot_map)
+        << ModuleMapFileName << 0 << IsFramework;
     return *F;
+  }
 
   // For frameworks, allow to have a private module map with a preferred
   // spelling when a public module map is absent.
diff --git a/clang/test/ARCMT/Inputs/module.map b/clang/test/ARCMT/Inputs/module.modulemap
similarity index 100%
rename from clang/test/ARCMT/Inputs/module.map
rename to clang/test/ARCMT/Inputs/module.modulemap
diff --git a/clang/test/Index/Inputs/Frameworks/module.map b/clang/test/Index/Inputs/Frameworks/module.modulemap
similarity index 100%
rename from clang/test/Index/Inputs/Frameworks/module.map
rename to clang/test/Index/Inputs/Frameworks/module.modulemap
diff --git a/clang/test/Index/Inputs/Headers/module.map b/clang/test/Index/Inputs/Headers/module.modulemap
similarity index 100%
rename from clang/test/Index/Inputs/Headers/module.map
rename to clang/test/Index/Inputs/Headers/module.modulemap
diff --git a/clang/test/Index/Inputs/Headers/nested/module.map b/clang/test/Index/Inputs/Headers/nested/module.modulemap
similarity index 100%
rename from clang/test/Index/Inputs/Headers/nested/module.map
rename to clang/test/Index/Inputs/Headers/nested/module.modulemap
diff --git a/clang/test/Index/Inputs/module.map b/clang/test/Index/Inputs/module.modulemap
similarity index 100%
rename from clang/test/Index/Inputs/module.map
rename to clang/test/Index/Inputs/module.modulemap
diff --git a/clang/test/Index/Inputs/vfsoverlay.yaml b/clang/test/Index/Inputs/vfsoverlay.yaml
index 95b00bef7d0e4c..3e9718b4c4314f 100644
--- a/clang/test/Index/Inputs/vfsoverlay.yaml
+++ b/clang/test/Index/Inputs/vfsoverlay.yaml
@@ -3,8 +3,8 @@
   'roots': [
     { 'name': 'OUT_DIR', 'type': 'directory',
       'contents': [
-        { 'name': 'module.map', 'type': 'file',
-          'external-contents': 'INPUT_DIR/module.map'
+        { 'name': 'module.modulemap', 'type': 'file',
+          'external-contents': 'INPUT_DIR/module.modulemap'
         },
         { 'name': 'ModuleNeedsVFS.h', 'type': 'file',
           'external-contents': 'INPUT_DIR/module_needs_vfs.h'
diff --git a/clang/test/Modules/Inputs/Conflicts/module.map b/clang/test/Modules/Inputs/Conflicts/module.modulemap
similarity index 100%
rename from clang/test/Modules/Inputs/Conflicts/module.map
rename to clang/test/Modules/Inputs/Conflicts/module.modulemap
diff --git a/clang/test/Modules/Inputs/DependsOnModule.framework/module.map b/clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.modulemap
similarity index 100%
rename from clang/test/Modules/Inputs/DependsOnModule.framework/module.map
rename to clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.modulemap
diff --git a/clang/test/Modules/Inputs/DependsOnModule.framework/module_private.map b/clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.private.modulemap
similarity index 100%
rename from clang/test/Modules/Inputs/DependsOnModule.framework/module_private.map
rename to clang/test/Modules/Inputs/DependsOnModule.framework/Modules/module.private.modulemap
diff --git a/clang/test/Modules/Inputs/GNUAsm/NeedsGNUInlineAsm.framework/module.map b/clang/test/Modules/Inputs/GNUAsm/NeedsGNUInlineAsm.framework/Modules/module.modulemap
similarity index 100%
rename from clang/test/Modules/Inputs/GNUAsm/NeedsGNUInlineAsm.framework/module.map
rename to clang/test/Modules/Inputs/GNUAsm/NeedsGNUInlineAsm.framework/Modules/module.modulemap
diff --git a/clang/test/Modules/Inputs/Modified/module.map b/clang/test/Modules/Inputs/Modified/module.modulemap
similarity index 100%
rename from clang/test/Modules/Inputs/Modified/module.map
rename to clang/test/Modules/Inputs/Modified/module.modulemap
diff --git a/clang/test/Modules/Inputs/ModuleDiags/module.map b/clang/test/Modules/Inputs/ModuleDiags/module.modulemap
similarity index 100%
rename from clang/test/Modules/Inputs/ModuleDiags/module.map
rename to clang/test/Modules/Inputs/ModuleDiags/module.modulemap
diff --git a/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/a.h b/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/a.h
new file mode 100644
index 00000000000000..d571c6e4f799f3
--- /dev/null
+++ b/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/a.h
@@ -0,0 +1 @@
+void will_be_found1(void);
diff --git a/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/module.map b/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/module.map
new file mode 100644
index 00000000000000..ef46443cedc925
--- /dev/null
+++ b/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/module.map
@@ -0,0 +1,3 @@
+module module_map {
+  header "a.h"
+}
diff --git a/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/module_private.map b/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/module_private.map
new file mode 100644
index 00000000000000..d542172a1235e7
--- /dev/null
+++ b/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/module_private.map
@@ -0,0 +1,3 @@
+module module_map.Private {
+  header "private.h"
+}
diff --git a/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/private.h b/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map/private.h
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map_F.framework/Headers/a.h b/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map_F.framework/Headers/a.h
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map_F.framework/PrivateHeaders/private.h b/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map_F.framework/PrivateHeaders/private.h
new file mode 100644
index 00000000000000..e69de29bb2d1d6
diff --git a/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map_F.framework/module.map b/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map_F.framework/module.map
new file mode 100644
index 00000000000000..f30545f8a88cdd
--- /dev/null
+++ b/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map_F.framework/module.map
@@ -0,0 +1,3 @@
+framework module Module_Map_F {
+  header "a.h"
+}
diff --git a/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map_F.framework/module_private.map b/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map_F.framework/module_private.map
new file mode 100644
index 00000000000000..0b3b5a78b8741d
--- /dev/null
+++ b/clang/test/Modules/Inputs/ModuleMapLocations/Module_Map_F.framework/module_private.map
@@ -0,0 +1,3 @@
+explicit framework module Module_Map_F.Private {
+  header "private.h"
+}
diff --git a/clang/test/Modules/Inputs/NoUmbrella.framework/module.map b/clang/test/Modules/Inputs/NoUmbrella.framework/Modules/module.modulemap
similarity index 100%
rename from clang/test/Modules/Inputs/NoUmbrella.framework/module.map
rename to clang/test/Modules/Inputs/NoUmbrella.framework/Modules/module.modulemap
diff --git a/clang/test/Modules/Inputs/NoUmbrella.framework/module_private.map b/clang/test/Modules/Inputs/NoUmbrella.framework/Modules/module.private.modulemap
similarity index 100%
rename from clang/test/Modules/Inputs/NoUmbrella.framework/module_private.map
rename to clang/test/Modules/Inputs/NoUmbrella.framework/Modules/module.priv...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/75142


More information about the cfe-commits mailing list