llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Cyndy Ishida (cyndyishida) <details> <summary>Changes</summary> Clients of the dependency scanning service may need to add dependencies based on the visibility of top-level modules, for example, when determining whether a Swift overlay dependency should be brought in based on whether there's a corresponding **visible** clang module for it. This patch introduces a new field `VisibleModules` that contains all the visible top-level modules in a given TU. Because visibility is determined by which headers or (sub)modules were imported, and not top-level module dependencies, the scanner now performs a separate DFS starting from what was directly imported for this computation. In my local performance testing, there was no observable performance impact. resolves: rdar://151416358 --- Patch is 36.60 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/147969.diff 33 Files Affected: - (modified) clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h (+9) - (modified) clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h (+2) - (modified) clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h (+8) - (modified) clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp (+2) - (modified) clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp (+30-1) - (modified) clang/test/ClangScanDeps/diagnostics.c (+3) - (modified) clang/test/ClangScanDeps/header-search-pruning-transitive.c (+8) - (modified) clang/test/ClangScanDeps/modules-context-hash-ignore-macros.c (+9) - (modified) clang/test/ClangScanDeps/modules-context-hash-outputs.c (+6) - (modified) clang/test/ClangScanDeps/modules-context-hash-warnings.c (+6) - (modified) clang/test/ClangScanDeps/modules-context-hash.c (+6) - (modified) clang/test/ClangScanDeps/modules-dep-args.c (+4) - (modified) clang/test/ClangScanDeps/modules-extern-submodule.c (+4) - (modified) clang/test/ClangScanDeps/modules-extern-unrelated.m (+5) - (modified) clang/test/ClangScanDeps/modules-fmodule-name-no-module-built.m (+4) - (modified) clang/test/ClangScanDeps/modules-full-output-tu-order.c (+2) - (modified) clang/test/ClangScanDeps/modules-full.cpp (+13) - (modified) clang/test/ClangScanDeps/modules-has-include-umbrella-header.c (+6) - (modified) clang/test/ClangScanDeps/modules-implementation-private.m (+4) - (modified) clang/test/ClangScanDeps/modules-implicit-dot-private.m (+3) - (modified) clang/test/ClangScanDeps/modules-incomplete-umbrella.c (+8) - (modified) clang/test/ClangScanDeps/modules-inferred.m (+3) - (modified) clang/test/ClangScanDeps/modules-no-undeclared-includes.c (+3) - (modified) clang/test/ClangScanDeps/modules-pch-common-stale.c (+9) - (modified) clang/test/ClangScanDeps/modules-pch-common-submodule.c (+7) - (modified) clang/test/ClangScanDeps/modules-pch-common-via-submodule.c (+6) - (modified) clang/test/ClangScanDeps/modules-pch.c (+12) - (modified) clang/test/ClangScanDeps/modules-priv-fw-from-pub.m (+4) - (modified) clang/test/ClangScanDeps/multiple-commands.c (+14) - (modified) clang/test/ClangScanDeps/removed-args.c (+4) - (modified) clang/test/ClangScanDeps/tu-buffer.c (+4) - (added) clang/test/ClangScanDeps/visible-modules.c (+72) - (modified) clang/tools/clang-scan-deps/ClangScanDeps.cpp (+14) ``````````diff diff --git a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h index ee24e5d1543d3..14de81a5ff2b6 100644 --- a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h +++ b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningTool.h @@ -57,6 +57,10 @@ struct TranslationUnitDeps { /// determined that the differences are benign for this compilation. std::vector<ModuleID> ClangModuleDeps; + /// A list of module names that are visible to this translation unit. This + /// includes both direct and transitive module dependencies. + std::vector<std::string> VisibleModules; + /// A list of the C++20 named modules this translation unit depends on. std::vector<std::string> NamedModuleDeps; @@ -188,6 +192,10 @@ class FullDependencyConsumer : public DependencyConsumer { DirectModuleDeps.push_back(ID); } + void handleVisibleModule(std::string ModuleName) override { + VisibleModules.push_back(ModuleName); + } + void handleContextHash(std::string Hash) override { ContextHash = std::move(Hash); } @@ -210,6 +218,7 @@ class FullDependencyConsumer : public DependencyConsumer { std::string ModuleName; std::vector<std::string> NamedModuleDeps; std::vector<ModuleID> DirectModuleDeps; + std::vector<std::string> VisibleModules; std::vector<Command> Commands; std::string ContextHash; std::vector<std::string> OutputPaths; diff --git a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h index 3e232c79397ce..6060e4b43312e 100644 --- a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h +++ b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningWorker.h @@ -59,6 +59,8 @@ class DependencyConsumer { virtual void handleDirectModuleDependency(ModuleID MD) = 0; + virtual void handleVisibleModule(std::string ModuleName) = 0; + virtual void handleContextHash(std::string Hash) = 0; }; diff --git a/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h b/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h index e96c49883d3c6..4136cb73f7043 100644 --- a/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h +++ b/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h @@ -323,6 +323,11 @@ class ModuleDepCollector final : public DependencyCollector { llvm::MapVector<const Module *, PrebuiltModuleDep> DirectPrebuiltModularDeps; /// Working set of direct modular dependencies. llvm::SetVector<const Module *> DirectModularDeps; + /// Working set of direct modular dependencies, as they were imported. + llvm::SmallPtrSet<const Module *, 32> DirectImports; + /// All direct and transitive visible modules. + llvm::StringSet<> VisibleModules; + /// Options that control the dependency output generation. std::unique_ptr<DependencyOutputOptions> Opts; /// A Clang invocation that's based on the original TU invocation and that has @@ -337,6 +342,9 @@ class ModuleDepCollector final : public DependencyCollector { /// Checks whether the module is known as being prebuilt. bool isPrebuiltModule(const Module *M); + /// Computes all visible modules resolved from direct imports. + void addVisibleModules(); + /// Adds \p Path to \c FileDeps, making it absolute if necessary. void addFileDep(StringRef Path); /// Adds \p Path to \c MD.FileDeps, making it absolute if necessary. diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp index 515211d47b348..d3d7641b83d48 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningTool.cpp @@ -40,6 +40,7 @@ class MakeDependencyPrinterConsumer : public DependencyConsumer { void handlePrebuiltModuleDependency(PrebuiltModuleDep PMD) override {} void handleModuleDependency(ModuleDeps MD) override {} void handleDirectModuleDependency(ModuleID ID) override {} + void handleVisibleModule(std::string ModuleName) override {} void handleContextHash(std::string Hash) override {} void printDependencies(std::string &S) { @@ -175,6 +176,7 @@ TranslationUnitDeps FullDependencyConsumer::takeTranslationUnitDeps() { TU.NamedModuleDeps = std::move(NamedModuleDeps); TU.FileDeps = std::move(Dependencies); TU.PrebuiltModuleDeps = std::move(PrebuiltModuleDeps); + TU.VisibleModules = std::move(VisibleModules); TU.Commands = std::move(Commands); for (auto &&M : ClangModuleDeps) { diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp index fa86d714ff69a..1a36171b0d483 100644 --- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp +++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp @@ -673,8 +673,10 @@ void ModuleDepCollectorPP::handleImport(const Module *Imported) { if (MDC.isPrebuiltModule(TopLevelModule)) MDC.DirectPrebuiltModularDeps.insert( {TopLevelModule, PrebuiltModuleDep{TopLevelModule}}); - else + else { MDC.DirectModularDeps.insert(TopLevelModule); + MDC.DirectImports.insert(Imported); + } } void ModuleDepCollectorPP::EndOfMainFile() { @@ -706,6 +708,8 @@ void ModuleDepCollectorPP::EndOfMainFile() { if (!MDC.isPrebuiltModule(M)) MDC.DirectModularDeps.insert(M); + MDC.addVisibleModules(); + for (const Module *M : MDC.DirectModularDeps) handleTopLevelModule(M); @@ -727,6 +731,9 @@ void ModuleDepCollectorPP::EndOfMainFile() { MDC.Consumer.handleDirectModuleDependency(It->second->ID); } + for (auto &&I : MDC.VisibleModules) + MDC.Consumer.handleVisibleModule(std::string(I.getKey())); + for (auto &&I : MDC.FileDeps) MDC.Consumer.handleFileDependency(I); @@ -993,6 +1000,28 @@ bool ModuleDepCollector::isPrebuiltModule(const Module *M) { return true; } +void ModuleDepCollector::addVisibleModules() { + llvm::DenseSet<Module *> ImportedModules; + auto InsertVisibleModules = [&](const Module *M) { + if (ImportedModules.contains(M)) + return; + + VisibleModules.insert(M->getTopLevelModuleName()); + SmallVector<Module *> Stack(M->Imports.begin(), M->Imports.end()); + while (!Stack.empty()) { + Module *CurrModule = Stack.pop_back_val(); + if (ImportedModules.contains(CurrModule)) + continue; + ImportedModules.insert(CurrModule); + VisibleModules.insert(CurrModule->getTopLevelModuleName()); + CurrModule->getExportedModules(Stack); + } + }; + + for (const Module *Import : DirectImports) + InsertVisibleModules(Import); +} + static StringRef makeAbsoluteAndPreferred(CompilerInstance &CI, StringRef Path, SmallVectorImpl<char> &Storage) { if (llvm::sys::path::is_absolute(Path) && diff --git a/clang/test/ClangScanDeps/diagnostics.c b/clang/test/ClangScanDeps/diagnostics.c index 8e3cf4c9f9fa6..4d09740d7b5ae 100644 --- a/clang/test/ClangScanDeps/diagnostics.c +++ b/clang/test/ClangScanDeps/diagnostics.c @@ -50,6 +50,9 @@ module mod { header "mod.h" } // CHECK-NEXT: "module-name": "mod" // CHECK-NEXT: } // CHECK-NEXT: ], +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "mod" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK-NOT: "-fimplicit-modules" // CHECK-NOT: "-fimplicit-module-maps" diff --git a/clang/test/ClangScanDeps/header-search-pruning-transitive.c b/clang/test/ClangScanDeps/header-search-pruning-transitive.c index 1e829bb02ddc4..680228d51a181 100644 --- a/clang/test/ClangScanDeps/header-search-pruning-transitive.c +++ b/clang/test/ClangScanDeps/header-search-pruning-transitive.c @@ -104,6 +104,10 @@ module X { header "X.h" } // CHECK-NEXT: "module-name": "X" // CHECK-NEXT: } // CHECK-NEXT: ], +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "X", +// CHECK-NEXT: "Y" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK: ], // CHECK: "file-deps": [ @@ -159,6 +163,10 @@ module X { header "X.h" } // CHECK-NEXT: "module-name": "X" // CHECK-NEXT: } // CHECK-NEXT: ], +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "X", +// CHECK-NEXT: "Y" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK: ], // CHECK: "file-deps": [ diff --git a/clang/test/ClangScanDeps/modules-context-hash-ignore-macros.c b/clang/test/ClangScanDeps/modules-context-hash-ignore-macros.c index 9f7a62fb9eb74..065a10dfb4841 100644 --- a/clang/test/ClangScanDeps/modules-context-hash-ignore-macros.c +++ b/clang/test/ClangScanDeps/modules-context-hash-ignore-macros.c @@ -36,6 +36,9 @@ // CHECK-NEXT: "module-name": "Mod" // CHECK-NEXT: } // CHECK-NEXT: ] +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "Mod" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK-NOT: "-DFOO" // CHECK-NOT: "FOO" @@ -49,6 +52,9 @@ // CHECK-NEXT: "module-name": "Mod" // CHECK-NEXT: } // CHECK-NEXT: ] +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "Mod" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK: "-D" // CHECK-NEXT: "FOO" @@ -62,6 +68,9 @@ // CHECK-NEXT: "module-name": "Mod" // CHECK-NEXT: } // CHECK-NEXT: ] +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "Mod" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK: "-fmodules-ignore-macro=FOO" // CHECK: "-D" diff --git a/clang/test/ClangScanDeps/modules-context-hash-outputs.c b/clang/test/ClangScanDeps/modules-context-hash-outputs.c index 5e63e60a70370..75f8f1c583d92 100644 --- a/clang/test/ClangScanDeps/modules-context-hash-outputs.c +++ b/clang/test/ClangScanDeps/modules-context-hash-outputs.c @@ -34,6 +34,9 @@ // CHECK-NEXT: "module-name": "Mod" // CHECK-NEXT: } // CHECK-NEXT: ] +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "Mod" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK: "-dependency-file" // CHECK: ] @@ -46,6 +49,9 @@ // CHECK-NEXT: "module-name": "Mod" // CHECK-NEXT: } // CHECK-NEXT: ] +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "Mod" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK-NOT: "-MF" // CHECK-NOT: "-dependency-file" diff --git a/clang/test/ClangScanDeps/modules-context-hash-warnings.c b/clang/test/ClangScanDeps/modules-context-hash-warnings.c index 09d2f20b329e3..5a3d76e158c98 100644 --- a/clang/test/ClangScanDeps/modules-context-hash-warnings.c +++ b/clang/test/ClangScanDeps/modules-context-hash-warnings.c @@ -34,6 +34,9 @@ // CHECK-NEXT: "module-name": "Mod" // CHECK-NEXT: } // CHECK-NEXT: ] +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "Mod" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK: "-Wall" // CHECK: ] @@ -46,6 +49,9 @@ // CHECK-NEXT: "module-name": "Mod" // CHECK-NEXT: } // CHECK-NEXT: ] +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "Mod" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK-NOT: "-Wall" // CHECK: ] diff --git a/clang/test/ClangScanDeps/modules-context-hash.c b/clang/test/ClangScanDeps/modules-context-hash.c index 9489563576d3b..6ea831f7aed08 100644 --- a/clang/test/ClangScanDeps/modules-context-hash.c +++ b/clang/test/ClangScanDeps/modules-context-hash.c @@ -51,6 +51,9 @@ // CHECK-NEXT: "module-name": "mod" // CHECK-NEXT: } // CHECK-NEXT: ], +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "mod" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK: ], // CHECK: "file-deps": [ @@ -89,6 +92,9 @@ // CHECK: "module-name": "mod" // CHECK-NEXT: } // CHECK-NEXT: ], +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "mod" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK: ], // CHECK: "file-deps": [ diff --git a/clang/test/ClangScanDeps/modules-dep-args.c b/clang/test/ClangScanDeps/modules-dep-args.c index 19f915923b84c..310a33e9533cf 100644 --- a/clang/test/ClangScanDeps/modules-dep-args.c +++ b/clang/test/ClangScanDeps/modules-dep-args.c @@ -87,6 +87,10 @@ module Direct { header "direct.h" } // CHECK-NEXT: "module-name": "Direct" // CHECK-NEXT: } // CHECK-NEXT: ], +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "Direct", +// CHECK-NEXT: "Transitive" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK_CACHE: "-fmodule-file={{.*}}/cache/{{.*}}/Direct-{{.*}}.pcm" // CHECK_BUILD: "-fmodule-file={{.*}}/build/{{.*}}/Direct-{{.*}}.pcm" diff --git a/clang/test/ClangScanDeps/modules-extern-submodule.c b/clang/test/ClangScanDeps/modules-extern-submodule.c index 01d3d6ba5e0d3..7a2b49879b97b 100644 --- a/clang/test/ClangScanDeps/modules-extern-submodule.c +++ b/clang/test/ClangScanDeps/modules-extern-submodule.c @@ -107,6 +107,10 @@ module third {} // CHECK-NEXT: "module-name": "first" // CHECK-NEXT: } // CHECK-NEXT: ], +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "first", +// CHECK-NEXT: "second" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK-NEXT: "-cc1", // CHECK: "-fmodule-map-file=[[PREFIX]]/first/first/module.modulemap", diff --git a/clang/test/ClangScanDeps/modules-extern-unrelated.m b/clang/test/ClangScanDeps/modules-extern-unrelated.m index c003f0d9a2ee8..50ee7464419f7 100644 --- a/clang/test/ClangScanDeps/modules-extern-unrelated.m +++ b/clang/test/ClangScanDeps/modules-extern-unrelated.m @@ -113,6 +113,11 @@ // CHECK-NEXT: "module-name": "zeroth" // CHECK-NEXT: } // CHECK-NEXT: ], +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "first", +// CHECK-NEXT: "second", +// CHECK-NEXT: "zeroth" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK: ], // CHECK-NEXT: "executable": "{{.*}}", diff --git a/clang/test/ClangScanDeps/modules-fmodule-name-no-module-built.m b/clang/test/ClangScanDeps/modules-fmodule-name-no-module-built.m index cfe29c2bf7cdb..0d91808e2bc04 100644 --- a/clang/test/ClangScanDeps/modules-fmodule-name-no-module-built.m +++ b/clang/test/ClangScanDeps/modules-fmodule-name-no-module-built.m @@ -41,6 +41,10 @@ // CHECK-NEXT: "module-name": "header2" // CHECK-NEXT: } // CHECK-NEXT: ], +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "header2", +// CHECK-NEXT: "header3" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK: ], // CHECK: "file-deps": [ diff --git a/clang/test/ClangScanDeps/modules-full-output-tu-order.c b/clang/test/ClangScanDeps/modules-full-output-tu-order.c index 065b8ac8ae07f..79e2947c5f039 100644 --- a/clang/test/ClangScanDeps/modules-full-output-tu-order.c +++ b/clang/test/ClangScanDeps/modules-full-output-tu-order.c @@ -31,6 +31,7 @@ // CHECK-NEXT: { // CHECK-NEXT: "clang-context-hash": "{{.*}}", // CHECK-NEXT: "clang-module-deps": [], +// CHECK-NEXT: "visible-clang-modules": [], // CHECK-NEXT: "command-line": [ // CHECK: "-D" // CHECK-NEXT: "ONE" @@ -47,6 +48,7 @@ // CHECK-NEXT: { // CHECK-NEXT: "clang-context-hash": "{{.*}}", // CHECK-NEXT: "clang-module-deps": [], +// CHECK-NEXT: "visible-clang-modules": [], // CHECK-NEXT: "command-line": [ // CHECK: "-D" // CHECK-NEXT: "TWO" diff --git a/clang/test/ClangScanDeps/modules-full.cpp b/clang/test/ClangScanDeps/modules-full.cpp index 38db3af4403bb..67da82eb35960 100644 --- a/clang/test/ClangScanDeps/modules-full.cpp +++ b/clang/test/ClangScanDeps/modules-full.cpp @@ -97,6 +97,10 @@ // CHECK-NEXT: "module-name": "header1" // CHECK-NEXT: } // CHECK-NEXT: ], +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "header1", +// CHECK-NEXT: "header2" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK-NOT: "-fimplicit-modules" // CHECK-NOT: "-fimplicit-module-maps" @@ -120,6 +124,9 @@ // CHECK-NEXT: "module-name": "header1" // CHECK-NEXT: } // CHECK-NEXT: ], +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "header1" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK-NOT: "-fimplicit-modules" // CHECK-NOT: "-fimplicit-module-maps" @@ -143,6 +150,9 @@ // CHECK-NEXT: "module-name": "header1" // CHECK-NEXT: } // CHECK-NEXT: ], +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "header1" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK-NOT: "-fimplicit-modules" // CHECK-NOT: "-fimplicit-module-maps" @@ -166,6 +176,9 @@ // CHECK-NEXT: "module-name": "header1" // CHECK-NEXT: } // CHECK-NEXT: ], +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "header1" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK-NOT: "-fimplicit-modules" // CHECK-NOT: "-fimplicit-module-maps" diff --git a/clang/test/ClangScanDeps/modules-has-include-umbrella-header.c b/clang/test/ClangScanDeps/modules-has-include-umbrella-header.c index 022c59ca65db2..f27ea8e1ed2eb 100644 --- a/clang/test/ClangScanDeps/modules-has-include-umbrella-header.c +++ b/clang/test/ClangScanDeps/modules-has-include-umbrella-header.c @@ -62,6 +62,12 @@ module Dependency { header "dependency.h" } // CHECK-NEXT: "module-name": "FW_Private" // CHECK-NEXT: } // CHECK: ], +// CHECK: "visible-clang-modules": [ +// CHECK-NEXT: "Dependency", +// CHECK-NEXT: "FW_Private", +// CHECK-NEXT: "Import", +// CHECK-NEXT: "Poison" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK: ], // CHECK: "file-deps": [ diff --git a/clang/test/ClangScanDeps/modules-implementation-private.m b/clang/test/ClangScanDeps/modules-implementation-private.m index b376073f4b9ee..59e77b85b7967 100644 --- a/clang/test/ClangScanDeps/modules-implementation-private.m +++ b/clang/test/ClangScanDeps/modules-implementation-private.m @@ -60,6 +60,10 @@ // CHECK-NEXT: "module-name": "FW_Private" // CHECK-NEXT: } // CHECK-NEXT: ], +// CHECK-NEXT: "visible-clang-modules": [ +// CHECK-NEXT: "FW", +// CHECK-NEXT: "FW_Private" +// CHECK-NEXT: ], // CHECK-NEXT: "command-line": [ // CHECK: ], // CHECK: "file-deps": [ diff --git a/clang/test/ClangScanDeps/modules-implicit-dot-private.m b/clang/test/ClangScanDeps/modules-implicit-dot-private.m index aa8caf3451dc4..5dfac2b09b316 100644 --- a/clang/test/ClangScanDeps/modules-implicit-dot-private.m +++ b/clang/test/ClangScanDeps/modules-implicit-dot-private.m @@ -75,6 +75,9 @@ // CHECK-NEXT: "module-name": ... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/147969 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits