llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-modules Author: Volodymyr Sapsai (vsapsai) <details> <summary>Changes</summary> According to the documentation > A header declaration that does not contain `exclude` nor `textual` specifies a header that contributes to the enclosing module. Which means that `exclude` and `textual` header don't contribute to the enclosing module and their presence isn't required to build such a module. The keywords tell clang how a header should be treated in a context of the module but they don't add headers to the module. When a textual header *is* used, clang still emits "file not found" error pointing to the location where the missing file is included. --- Full diff: https://github.com/llvm/llvm-project/pull/138227.diff 3 Files Affected: - (modified) clang/lib/Lex/ModuleMap.cpp (+4-2) - (modified) clang/test/Modules/Inputs/submodules/module.modulemap (+4) - (modified) clang/test/Modules/missing-header.m (+3) ``````````diff diff --git a/clang/lib/Lex/ModuleMap.cpp b/clang/lib/Lex/ModuleMap.cpp index c2f13fa48d464..1ba02b919a22a 100644 --- a/clang/lib/Lex/ModuleMap.cpp +++ b/clang/lib/Lex/ModuleMap.cpp @@ -310,8 +310,10 @@ void ModuleMap::resolveHeader(Module *Mod, } else if (Header.HasBuiltinHeader && !Header.Size && !Header.ModTime) { // There's a builtin header but no corresponding on-disk header. Assume // this was supposed to modularize the builtin header alone. - } else if (Header.Kind == Module::HK_Excluded) { - // Ignore missing excluded header files. They're optional anyway. + } else if ((Header.Kind == Module::HK_Excluded) || + (Header.Kind == Module::HK_Textual)) { + // Ignore excluded and textual header files as a module can be built with + // such headers missing. } else { // If we find a module that has a missing header, we mark this module as // unavailable and store the header directive for displaying diagnostics. diff --git a/clang/test/Modules/Inputs/submodules/module.modulemap b/clang/test/Modules/Inputs/submodules/module.modulemap index 1c1b76a08969e..9e8143b8101de 100644 --- a/clang/test/Modules/Inputs/submodules/module.modulemap +++ b/clang/test/Modules/Inputs/submodules/module.modulemap @@ -30,3 +30,7 @@ module missing_umbrella_with_inferred_submodules { module * { export * } export * } + +module missing_textual_header { + textual header "missing_textual.h" +} diff --git a/clang/test/Modules/missing-header.m b/clang/test/Modules/missing-header.m index c162e1b5f08b3..84d82e5ceda32 100644 --- a/clang/test/Modules/missing-header.m +++ b/clang/test/Modules/missing-header.m @@ -8,6 +8,9 @@ @import missing_unavailable_headers.not_missing; // OK // CHECK-NOT: missing_unavailable_headers +@import missing_textual_header; // OK +// CHECK-NOT: missing_textual_header + @import missing_headers; // CHECK: module.modulemap:15:27: error: header 'missing.h' not found // CHECK: could not build module 'missing_headers' `````````` </details> https://github.com/llvm/llvm-project/pull/138227 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits