llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Artem Chikin (artemcm) <details> <summary>Changes</summary> This will allow scanner clients to be able to compute e.g. auto-linking dependencies of the scanned translation unit. --- Patch is 39.31 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/93588.diff 36 Files Affected: - (modified) clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h (+9) - (modified) clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp (+2) - (modified) clang/test/ClangScanDeps/diagnostics.c (+1) - (modified) clang/test/ClangScanDeps/header-search-pruning-transitive.c (+4) - (modified) clang/test/ClangScanDeps/header-search-pruning.cpp (+3) - (added) clang/test/ClangScanDeps/link-libraries.c (+121) - (modified) clang/test/ClangScanDeps/modules-canononical-module-map-case.c (+6) - (modified) clang/test/ClangScanDeps/modules-context-hash.c (+2) - (modified) clang/test/ClangScanDeps/modules-dep-args.c (+2) - (modified) clang/test/ClangScanDeps/modules-excluded-header.m (+1) - (modified) clang/test/ClangScanDeps/modules-extern-submodule.c (+3) - (modified) clang/test/ClangScanDeps/modules-extern-unrelated.m (+4) - (modified) clang/test/ClangScanDeps/modules-file-path-isolation.c (+1) - (modified) clang/test/ClangScanDeps/modules-fmodule-name-no-module-built.m (+1) - (modified) clang/test/ClangScanDeps/modules-full-by-mod-name.c (+3) - (modified) clang/test/ClangScanDeps/modules-full.cpp (+3) - (modified) clang/test/ClangScanDeps/modules-implementation-private.m (+6) - (modified) clang/test/ClangScanDeps/modules-implicit-dot-private.m (+12) - (modified) clang/test/ClangScanDeps/modules-incomplete-umbrella.c (+25) - (modified) clang/test/ClangScanDeps/modules-inferred.m (+6) - (modified) clang/test/ClangScanDeps/modules-no-undeclared-includes.c (+1) - (modified) clang/test/ClangScanDeps/modules-pch-common-submodule.c (+2) - (modified) clang/test/ClangScanDeps/modules-pch-common-via-submodule.c (+2) - (modified) clang/test/ClangScanDeps/modules-pch.c (+5) - (modified) clang/test/ClangScanDeps/modules-priv-fw-from-pub.m (+13) - (modified) clang/test/ClangScanDeps/modules-redefinition.m (+1) - (modified) clang/test/ClangScanDeps/modules-symlink-dir-vfs.c (+6) - (modified) clang/test/ClangScanDeps/modules-transitive.c (+1) - (modified) clang/test/ClangScanDeps/optimize-canonicalize-macros.m (+2) - (modified) clang/test/ClangScanDeps/optimize-fmodulemap.m (+2) - (modified) clang/test/ClangScanDeps/optimize-system-warnings.m (+3) - (modified) clang/test/ClangScanDeps/optimize-vfs-leak.m (+4-1) - (modified) clang/test/ClangScanDeps/optimize-vfs.m (+3) - (modified) clang/test/ClangScanDeps/removed-args.c (+2) - (modified) clang/test/ClangScanDeps/working-dir.m (+4) - (modified) clang/tools/clang-scan-deps/ClangScanDeps.cpp (+15) ``````````diff diff --git a/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h b/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h index da51292296a90..5afb373b3462e 100644 --- a/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h +++ b/clang/include/clang/Tooling/DependencyScanning/ModuleDepCollector.h @@ -11,6 +11,7 @@ #include "clang/Basic/LLVM.h" #include "clang/Basic/SourceManager.h" +#include "clang/Basic/Module.h" #include "clang/Frontend/CompilerInvocation.h" #include "clang/Frontend/Utils.h" #include "clang/Lex/HeaderSearch.h" @@ -138,6 +139,14 @@ struct ModuleDeps { /// determined that the differences are benign for this compilation. std::vector<ModuleID> ClangModuleDeps; + /// The set of libraries or frameworks to link against when + /// an entity from this module is used. + llvm::SmallVector<Module::LinkLibrary, 2> LinkLibraries; + + /// Autolinking uses the framework name for linking purposes + /// when this is false and the export_as name otherwise. + bool UseExportAsModuleLinkName; + /// Get (or compute) the compiler invocation that can be used to build this /// module. Does not include argv[0]. const std::vector<std::string> &getBuildArguments(); diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp index f46324ee9989e..6b2ea1a67b96b 100644 --- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp +++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp @@ -578,6 +578,8 @@ ModuleDepCollectorPP::handleTopLevelModule(const Module *M) { MD.ID.ModuleName = M->getFullModuleName(); MD.IsSystem = M->IsSystem; + MD.LinkLibraries = M->LinkLibraries; + MD.UseExportAsModuleLinkName = M->UseExportAsModuleLinkName; ModuleMap &ModMapInfo = MDC.ScanInstance.getPreprocessor().getHeaderSearchInfo().getModuleMap(); diff --git a/clang/test/ClangScanDeps/diagnostics.c b/clang/test/ClangScanDeps/diagnostics.c index 42aeca16cddc4..bc05594f7828d 100644 --- a/clang/test/ClangScanDeps/diagnostics.c +++ b/clang/test/ClangScanDeps/diagnostics.c @@ -37,6 +37,7 @@ module mod { header "mod.h" } // CHECK-NEXT: "[[PREFIX]]/mod.h" // CHECK-NEXT: "[[PREFIX]]/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "mod" // CHECK-NEXT: } // CHECK-NEXT: ], diff --git a/clang/test/ClangScanDeps/header-search-pruning-transitive.c b/clang/test/ClangScanDeps/header-search-pruning-transitive.c index eb93b13692043..6c42265090268 100644 --- a/clang/test/ClangScanDeps/header-search-pruning-transitive.c +++ b/clang/test/ClangScanDeps/header-search-pruning-transitive.c @@ -75,6 +75,7 @@ module X { header "X.h" } // CHECK-NEXT: "[[PREFIX]]/X.h", // CHECK-NEXT: "[[PREFIX]]/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "X" // CHECK-NEXT: }, // CHECK-NEXT: { @@ -90,6 +91,7 @@ module X { header "X.h" } // CHECK-NEXT: "[[PREFIX]]/end/end.h", // CHECK-NEXT: "[[PREFIX]]/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "Y" // CHECK-NEXT: } // CHECK-NEXT: ], @@ -129,6 +131,7 @@ module X { header "X.h" } // CHECK-NEXT: "[[PREFIX]]/X.h", // CHECK-NEXT: "[[PREFIX]]/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "X" // CHECK-NEXT: }, // CHECK-NEXT: { @@ -143,6 +146,7 @@ module X { header "X.h" } // CHECK-NEXT: "[[PREFIX]]/end/end.h", // CHECK-NEXT: "[[PREFIX]]/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "Y" // CHECK-NEXT: } // CHECK-NEXT: ], diff --git a/clang/test/ClangScanDeps/header-search-pruning.cpp b/clang/test/ClangScanDeps/header-search-pruning.cpp index daacd3d319fb0..6291698002751 100644 --- a/clang/test/ClangScanDeps/header-search-pruning.cpp +++ b/clang/test/ClangScanDeps/header-search-pruning.cpp @@ -33,6 +33,7 @@ // CHECK_A-NEXT: "context-hash": "{{.*}}", // CHECK_A-NEXT: "file-deps": [ // CHECK_A: ], +// CHECK_A-NEXT: "link-libraries": [], // CHECK_A-NEXT: "name": "mod" // CHECK_A-NEXT: } // CHECK_A-NEXT: ] @@ -55,6 +56,7 @@ // CHECK_B-NEXT: "context-hash": "{{.*}}", // CHECK_B-NEXT: "file-deps": [ // CHECK_B: ], +// CHECK_B-NEXT: "link-libraries": [], // CHECK_B-NEXT: "name": "mod" // CHECK_B-NEXT: } // CHECK_B-NEXT: ] @@ -79,6 +81,7 @@ // CHECK_AB-NEXT: "context-hash": "{{.*}}", // CHECK_AB-NEXT: "file-deps": [ // CHECK_AB: ], +// CHECK_AB-NEXT: "link-libraries": [], // CHECK_AB-NEXT: "name": "mod" // CHECK_AB-NEXT: } // CHECK_AB-NEXT: ] diff --git a/clang/test/ClangScanDeps/link-libraries.c b/clang/test/ClangScanDeps/link-libraries.c new file mode 100644 index 0000000000000..c09691d2356ef --- /dev/null +++ b/clang/test/ClangScanDeps/link-libraries.c @@ -0,0 +1,121 @@ +// RUN: rm -rf %t +// RUN: mkdir %t +// RUN: mkdir %t/Inputs +// RUN: cp -R %S/Inputs/frameworks %t/Inputs/frameworks +// RUN: split-file %s %t + +//--- module.modulemap +module root { header "root.h" } +module direct { header "direct.h" } +module transitive { + header "transitive.h" + link framework "libTransitive" +} +//--- root.h +#include "direct.h" +#include "root/textual.h" +#include "Framework/Framework.h" +//--- direct.h +#include "transitive.h" +//--- transitive.h +// empty + +//--- root/textual.h +// This is here to verify that the "root" directory doesn't clash with name of +// the "root" module. + +//--- cdb.json.template +[{ + "file": "", + "directory": "DIR", + "command": "clang -fmodules -fmodules-cache-path=DIR/cache -FDIR/Inputs/frameworks -I DIR -x c" +}] + +// RUN: sed "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json +// RUN: clang-scan-deps -compilation-database %t/cdb.json -format experimental-full -module-name=root > %t/result.json +// RUN: cat %t/result.json | sed 's:\\\\\?:/:g' | FileCheck -DPREFIX=%/t %s + +// CHECK: { +// CHECK-NEXT: "modules": [ +// CHECK-NEXT: { +// CHECK-NEXT: "clang-module-deps": [], +// CHECK-NEXT: "clang-modulemap-file": "{{.*}}/__inferred_module.map", +// CHECK-NEXT: "command-line": [ +// CHECK: ], +// CHECK-NEXT: "context-hash": "{{.*}}", +// CHECK-NEXT: "file-deps": [ +// CHECK-NEXT: "{{.*}}/Framework.h" +// CHECK-NEXT: "{{.*}}/__inferred_module.map" +// CHECK-NEXT: "{{.*}}/module.modulemap" +// CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [ +// CHECK-NEXT: { +// CHECK-NEXT: "isFramework": true, +// CHECK-NEXT: "link-name": "Framework" +// CHECK-NEXT: } +// CHECK-NEXT: ], +// CHECK-NEXT: "name": "Framework" +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: "clang-module-deps": [ +// CHECK-NEXT: { +// CHECK-NEXT: "context-hash": "{{.*}}", +// CHECK-NEXT: "module-name": "transitive" +// CHECK-NEXT: } +// CHECK-NEXT: ], +// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", +// CHECK-NEXT: "command-line": [ +// CHECK: ], +// CHECK-NEXT: "context-hash": "{{.*}}", +// CHECK-NEXT: "file-deps": [ +// CHECK-NEXT: "[[PREFIX]]/direct.h" +// CHECK-NEXT: "[[PREFIX]]/module.modulemap" +// CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], +// CHECK-NEXT: "name": "direct" +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: "clang-module-deps": [ +// CHECK-NEXT: { +// CHECK-NEXT: "context-hash": "{{.*}}", +// CHECK-NEXT: "module-name": "Framework" +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: "context-hash": "{{.*}}", +// CHECK-NEXT: "module-name": "direct" +// CHECK-NEXT: } +// CHECK-NEXT: ], +// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", +// CHECK-NEXT: "command-line": [ +// CHECK: ], +// CHECK-NEXT: "context-hash": "{{.*}}", +// CHECK-NEXT: "file-deps": [ +// CHECK-NEXT: "[[PREFIX]]/Inputs/frameworks/module.modulemap" +// CHECK-NEXT: "[[PREFIX]]/module.modulemap" +// CHECK-NEXT: "[[PREFIX]]/root.h" +// CHECK-NEXT: "[[PREFIX]]/root/textual.h" +// CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], +// CHECK-NEXT: "name": "root" +// CHECK-NEXT: }, +// CHECK-NEXT: { +// CHECK-NEXT: "clang-module-deps": [], +// CHECK-NEXT: "clang-modulemap-file": "[[PREFIX]]/module.modulemap", +// CHECK-NEXT: "command-line": [ +// CHECK: ], +// CHECK-NEXT: "context-hash": "{{.*}}", +// CHECK-NEXT: "file-deps": [ +// CHECK-NEXT: "[[PREFIX]]/module.modulemap" +// CHECK-NEXT: "[[PREFIX]]/transitive.h" +// CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [ +// CHECK-NEXT: { +// CHECK-NEXT: "isFramework": true, +// CHECK-NEXT: "link-name": "libTransitive" +// CHECK-NEXT: } +// CHECK-NEXT: ], +// CHECK-NEXT: "name": "transitive" +// CHECK-NEXT: } +// CHECK-NEXT: ], +// CHECK-NEXT: "translation-units": [] +// CHECK-NEXT: } diff --git a/clang/test/ClangScanDeps/modules-canononical-module-map-case.c b/clang/test/ClangScanDeps/modules-canononical-module-map-case.c index a7c9624e2de71..ccb0653dfc5ec 100644 --- a/clang/test/ClangScanDeps/modules-canononical-module-map-case.c +++ b/clang/test/ClangScanDeps/modules-canononical-module-map-case.c @@ -65,6 +65,12 @@ framework module FW { // CHECK-NEXT: "context-hash": "{{.*}}", // CHECK-NEXT: "file-deps": [ // CHECK: ], +// CHECK-NEXT: "link-libraries": [ +// CHECK-NEXT: { +// CHECK-NEXT: "isFramework": true, +// CHECK-NEXT: "link-name": "FW" +// CHECK-NEXT: } +// CHECK-NEXT: ], // CHECK-NEXT: "name": "FW" // CHECK-NEXT: } // CHECK-NEXT: ] diff --git a/clang/test/ClangScanDeps/modules-context-hash.c b/clang/test/ClangScanDeps/modules-context-hash.c index 3108c924b0721..69fd8561a2b32 100644 --- a/clang/test/ClangScanDeps/modules-context-hash.c +++ b/clang/test/ClangScanDeps/modules-context-hash.c @@ -38,6 +38,7 @@ // CHECK-NEXT: "[[PREFIX]]/mod.h", // CHECK-NEXT: "[[PREFIX]]/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "mod" // CHECK-NEXT: } // CHECK-NEXT: ], @@ -75,6 +76,7 @@ // CHECK-NEXT: "[[PREFIX]]/mod.h", // CHECK-NEXT: "[[PREFIX]]/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "mod" // CHECK-NEXT: } // CHECK-NEXT: ], diff --git a/clang/test/ClangScanDeps/modules-dep-args.c b/clang/test/ClangScanDeps/modules-dep-args.c index 12bdb6eb1f7fd..14de2e8f4594a 100644 --- a/clang/test/ClangScanDeps/modules-dep-args.c +++ b/clang/test/ClangScanDeps/modules-dep-args.c @@ -61,6 +61,7 @@ module Direct { header "direct.h" } // CHECK-NEXT: "[[PREFIX]]/direct.h", // CHECK-NEXT: "[[PREFIX]]/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "Direct" // CHECK-NEXT: }, // CHECK-NEXT: { @@ -73,6 +74,7 @@ module Direct { header "direct.h" } // CHECK-NEXT: "[[PREFIX]]/module.modulemap", // CHECK-NEXT: "[[PREFIX]]/transitive.h" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "Transitive" // CHECK-NEXT: } // CHECK-NEXT: ], diff --git a/clang/test/ClangScanDeps/modules-excluded-header.m b/clang/test/ClangScanDeps/modules-excluded-header.m index 030c92247a689..302db55b61e03 100644 --- a/clang/test/ClangScanDeps/modules-excluded-header.m +++ b/clang/test/ClangScanDeps/modules-excluded-header.m @@ -42,6 +42,7 @@ // CHECK-NEXT: "context-hash": "{{.*}}", // CHECK-NEXT: "file-deps": [ // CHECK: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "Mod" // CHECK-NEXT: } // CHECK-NEXT: ] diff --git a/clang/test/ClangScanDeps/modules-extern-submodule.c b/clang/test/ClangScanDeps/modules-extern-submodule.c index 61cc722e84bc0..92f2c749dd2c3 100644 --- a/clang/test/ClangScanDeps/modules-extern-submodule.c +++ b/clang/test/ClangScanDeps/modules-extern-submodule.c @@ -54,6 +54,7 @@ module third {} // CHECK-NEXT: "[[PREFIX]]/second/second/module.modulemap", // CHECK-NEXT: "[[PREFIX]]/second/second/sub.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "first" // CHECK-NEXT: }, // CHECK-NEXT: { @@ -76,6 +77,7 @@ module third {} // CHECK-NEXT: "[[PREFIX]]/second/second/sub.modulemap", // CHECK-NEXT: "[[PREFIX]]/third/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "second" // CHECK-NEXT: }, // CHECK-NEXT: { @@ -90,6 +92,7 @@ module third {} // CHECK-NEXT: "file-deps": [ // CHECK-NEXT: "[[PREFIX]]/third/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "third" // CHECK-NEXT: } // CHECK-NEXT: ], diff --git a/clang/test/ClangScanDeps/modules-extern-unrelated.m b/clang/test/ClangScanDeps/modules-extern-unrelated.m index 957132fd5b185..724779c12a97b 100644 --- a/clang/test/ClangScanDeps/modules-extern-unrelated.m +++ b/clang/test/ClangScanDeps/modules-extern-unrelated.m @@ -40,6 +40,7 @@ // CHECK-NEXT: "file-deps": [ // CHECK-NEXT: "[[PREFIX]]/first/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "first" // CHECK-NEXT: }, // CHECK-NEXT: { @@ -52,6 +53,7 @@ // CHECK-NEXT: "[[PREFIX]]/first/first_other.h", // CHECK-NEXT: "[[PREFIX]]/first/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "first_other" // CHECK-NEXT: }, // CHECK-NEXT: { @@ -71,6 +73,7 @@ // CHECK-NEXT: "[[PREFIX]]/second/second.h", // CHECK-NEXT: "[[PREFIX]]/second/second.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "second" // CHECK-NEXT: }, // CHECK-NEXT: { @@ -95,6 +98,7 @@ // CHECK-NEXT: "[[PREFIX]]/zeroth/module.modulemap", // CHECK-NEXT: "[[PREFIX]]/zeroth/zeroth.h" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "zeroth" // CHECK-NEXT: } // CHECK-NEXT: ], diff --git a/clang/test/ClangScanDeps/modules-file-path-isolation.c b/clang/test/ClangScanDeps/modules-file-path-isolation.c index 0e55bba753841..d4fef2f4fdd28 100644 --- a/clang/test/ClangScanDeps/modules-file-path-isolation.c +++ b/clang/test/ClangScanDeps/modules-file-path-isolation.c @@ -20,6 +20,7 @@ // CHECK-NEXT: "{{.*}}A.h", // CHECK-NEXT: "{{.*}}module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "A" // CHECK-NEXT: } 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 a6206b1546751..e4d5caff9236e 100644 --- a/clang/test/ClangScanDeps/modules-fmodule-name-no-module-built.m +++ b/clang/test/ClangScanDeps/modules-fmodule-name-no-module-built.m @@ -28,6 +28,7 @@ // CHECK-NEXT: "[[PREFIX]]/Inputs/header2.h", // CHECK-NEXT: "[[PREFIX]]/Inputs/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "header2" // CHECK-NEXT: } // CHECK-NEXT: ], diff --git a/clang/test/ClangScanDeps/modules-full-by-mod-name.c b/clang/test/ClangScanDeps/modules-full-by-mod-name.c index 7ebd39d0dc1c9..dd2b3f62e3663 100644 --- a/clang/test/ClangScanDeps/modules-full-by-mod-name.c +++ b/clang/test/ClangScanDeps/modules-full-by-mod-name.c @@ -45,6 +45,7 @@ module transitive { header "transitive.h" } // CHECK-NEXT: "[[PREFIX]]/direct.h" // CHECK-NEXT: "[[PREFIX]]/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "direct" // CHECK-NEXT: }, // CHECK-NEXT: { @@ -63,6 +64,7 @@ module transitive { header "transitive.h" } // CHECK-NEXT: "[[PREFIX]]/root.h" // CHECK-NEXT: "[[PREFIX]]/root/textual.h" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "root" // CHECK-NEXT: }, // CHECK-NEXT: { @@ -75,6 +77,7 @@ module transitive { header "transitive.h" } // CHECK-NEXT: "[[PREFIX]]/module.modulemap" // CHECK-NEXT: "[[PREFIX]]/transitive.h" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "transitive" // CHECK-NEXT: } // CHECK-NEXT: ], diff --git a/clang/test/ClangScanDeps/modules-full.cpp b/clang/test/ClangScanDeps/modules-full.cpp index a00a431eb5691..e9b4386da5b5e 100644 --- a/clang/test/ClangScanDeps/modules-full.cpp +++ b/clang/test/ClangScanDeps/modules-full.cpp @@ -44,6 +44,7 @@ // CHECK-NEXT: "[[PREFIX]]/Inputs/header.h", // CHECK-NEXT: "[[PREFIX]]/Inputs/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "header1" // CHECK-NEXT: }, // CHECK-NEXT: { @@ -62,6 +63,7 @@ // CHECK-NEXT: "[[PREFIX]]/Inputs/header.h", // CHECK-NEXT: "[[PREFIX]]/Inputs/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "header1" // CHECK-NEXT: }, // CHECK-NEXT: { @@ -80,6 +82,7 @@ // CHECK-NEXT: "[[PREFIX]]/Inputs/header2.h", // CHECK-NEXT: "[[PREFIX]]/Inputs/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [], // CHECK-NEXT: "name": "header2" // CHECK-NEXT: } // CHECK-NEXT: ], diff --git a/clang/test/ClangScanDeps/modules-implementation-private.m b/clang/test/ClangScanDeps/modules-implementation-private.m index 6a9d83c22678b..acc01017d6640 100644 --- a/clang/test/ClangScanDeps/modules-implementation-private.m +++ b/clang/test/ClangScanDeps/modules-implementation-private.m @@ -40,6 +40,12 @@ // CHECK-NEXT: "[[PREFIX]]/frameworks/FW.framework/Modules/module.private.modulemap", // CHECK-NEXT: "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/FW_Private.h" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [ +// CHECK-NEXT: { +// CHECK-NEXT: "isFramework": true, +// CHECK-NEXT: "link-name": "FW" +// CHECK-NEXT: } +// CHECK-NEXT: ], // CHECK-NEXT: "name": "FW_Private" // CHECK-NEXT: } // CHECK-NEXT: ], diff --git a/clang/test/ClangScanDeps/modules-implicit-dot-private.m b/clang/test/ClangScanDeps/modules-implicit-dot-private.m index 20b988d15de32..b3bc90f03f179 100644 --- a/clang/test/ClangScanDeps/modules-implicit-dot-private.m +++ b/clang/test/ClangScanDeps/modules-implicit-dot-private.m @@ -35,6 +35,12 @@ // CHECK-NEXT: "[[PREFIX]]/frameworks/FW.framework/Headers/FW.h", // CHECK-NEXT: "[[PREFIX]]/frameworks/FW.framework/Modules/module.modulemap" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [ +// CHECK-NEXT: { +// CHECK-NEXT: "isFramework": true, +// CHECK-NEXT: "link-name": "FW" +// CHECK-NEXT: } +// CHECK-NEXT: ], // CHECK-NEXT: "name": "FW" // CHECK: }, // CHECK: { @@ -47,6 +53,12 @@ // CHECK-NEXT: "[[PREFIX]]/frameworks/FW.framework/Modules/module.private.modulemap", // CHECK-NEXT: "[[PREFIX]]/frameworks/FW.framework/PrivateHeaders/FW_Private.h" // CHECK-NEXT: ], +// CHECK-NEXT: "link-libraries": [ +// CHECK-NEXT: ... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/93588 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits