diff --git a/include/swift/AST/ModuleDependencies.h b/include/swift/AST/ModuleDependencies.h index f6a057a45ed..7d3d27ae803 100644 --- a/include/swift/AST/ModuleDependencies.h +++ b/include/swift/AST/ModuleDependencies.h @@ -724,7 +724,7 @@ public: // Special case: a submodule named "Foo.Private" can be moved to a top-level // module named "Foo_Private". ClangImporter has special support for this. if (submoduleComponent.Item.str() == "Private") - ImportedModuleName = ImportedModuleName + "_Private"; + addOptionalModuleImport(ImportedModuleName + "_Private", alreadyAddedModules); } addModuleImport(ImportedModuleName, alreadyAddedModules); diff --git a/test/ScanDependencies/Inputs/CHeaders/Y.h b/test/ScanDependencies/Inputs/CHeaders/Y.h new file mode 100644 index 00000000000..e385076888c --- /dev/null +++ b/test/ScanDependencies/Inputs/CHeaders/Y.h @@ -0,0 +1 @@ +void funcY(void); diff --git a/test/ScanDependencies/Inputs/CHeaders/Y_Private.h b/test/ScanDependencies/Inputs/CHeaders/Y_Private.h new file mode 100644 index 00000000000..b6991bc8939 --- /dev/null +++ b/test/ScanDependencies/Inputs/CHeaders/Y_Private.h @@ -0,0 +1 @@ +void funcYPrivate(void); diff --git a/test/ScanDependencies/Inputs/CHeaders/module.modulemap b/test/ScanDependencies/Inputs/CHeaders/module.modulemap index d37a3148d0c..2957143d73c 100644 --- a/test/ScanDependencies/Inputs/CHeaders/module.modulemap +++ b/test/ScanDependencies/Inputs/CHeaders/module.modulemap @@ -46,3 +46,10 @@ module X_Private { header "X_Private.h" export * } +module Y { + header "Y.h" + export * + explicit module Private { + header "Y_Private.h" + } +} \ No newline at end of file diff --git a/test/ScanDependencies/module_deps_clang_private_submodule.swift b/test/ScanDependencies/module_deps_clang_private_submodule.swift index 02dbcd163f1..c12c77dbeda 100644 --- a/test/ScanDependencies/module_deps_clang_private_submodule.swift +++ b/test/ScanDependencies/module_deps_clang_private_submodule.swift @@ -1,7 +1,9 @@ // RUN: %empty-directory(%t.module-cache) -// RUN: %target-swift-frontend -scan-dependencies -module-cache-path %t.module-cache %s -o %t.deps.json -I %S/Inputs/CHeaders +// RUN: %target-swift-frontend -scan-dependencies -module-cache-path %t.module-cache %s -o %t.deps.json -I %S/Inputs/CHeaders -verify // RUN: %validate-json %t.deps.json | %FileCheck %s // CHECK: "clang": "X_Private" +// CHECK: "clang": "Y" +// CHECK-NOT: "clang": "Y_Private" import X.Private - +import Y.Private