diff --git a/lib/FrontendTool/ScanDependencies.cpp b/lib/FrontendTool/ScanDependencies.cpp index 0778dcf3dc757..31ce01280bf81 100644 --- a/lib/FrontendTool/ScanDependencies.cpp +++ b/lib/FrontendTool/ScanDependencies.cpp @@ -130,7 +130,10 @@ static std::vector resolveDirectDependencies( for (const auto &clangDep : allClangModules) { if (auto found = ctx.getModuleDependencies( clangDep, /*onlyClangModule=*/false, cache, ASTDelegate)) { - if (found->getKind() == ModuleDependenciesKind::Swift) + // ASTContext::getModuleDependencies returns dependencies for a module with a given name. + // This Clang module may have the same name as the Swift module we are resolving, so we + // need to make sure we don't add a dependency from a Swift module to itself. + if (found->getKind() == ModuleDependenciesKind::Swift && clangDep != module.first) result.push_back({clangDep, found->getKind()}); } } diff --git a/test/ScanDependencies/module_deps.swift b/test/ScanDependencies/module_deps.swift index 84ff06c2b4c58..72885e5072f9b 100644 --- a/test/ScanDependencies/module_deps.swift +++ b/test/ScanDependencies/module_deps.swift @@ -126,10 +126,9 @@ import G // CHECK: "directDependencies" // CHECK-NEXT: { // CHECK-NEXT: "clang": "G" -// CHECK-NEXT: }, -// CHECK-NEXT: { -// CHECK-NEXT: "swift": "G" // CHECK-NEXT: } +// CHECK-NEXT: ], +// CHECK-NEXT: "details": { // CHECK: "contextHash": "{{.*}}", // CHECK: "commandLine": [