Skip to content

Commit 03786da

Browse files
Merge pull request #73227 from cachemeifyoucan/eng/PR-testable-fallback
[ScanDependency] Allow continue searching for testable module
2 parents 02e1c93 + 10b3048 commit 03786da

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1200,7 +1200,7 @@ REMARK(module_api_import_aliases,none,
12001200
(const Decl *, ModuleDecl *, ModuleDecl *, bool))
12011201

12021202
REMARK(skip_module_invalid,none,"skip invalid swiftmodule: %0", (StringRef))
1203-
REMARK(skip_module_testable,none,"skip swiftmodule built with '-enable-testing': %0", (StringRef))
1203+
WARNING(skip_module_not_testable,none,"ignore swiftmodule built without '-enable-testing': %0", (StringRef))
12041204

12051205
REMARK(macro_loaded,none,
12061206
"loaded macro implementation module %0 from "

lib/Serialization/SerializedModuleLoader.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,12 @@ SerializedModuleLoaderBase::scanModuleFile(Twine modulePath, bool isFramework,
454454
modulePath.str());
455455
return std::make_error_code(std::errc::no_such_file_or_directory);
456456
}
457+
458+
if (isTestableImport && !loadedModuleFile->isTestable()) {
459+
Ctx.Diags.diagnose(SourceLoc(), diag::skip_module_not_testable,
460+
modulePath.str());
461+
return std::make_error_code(std::errc::no_such_file_or_directory);
462+
}
457463
}
458464

459465
// Some transitive dependencies of binary modules are not required to be

test/ScanDependencies/testable-dependencies.swift

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,21 @@
4242
// RUN: %{python} %S/../CAS/Inputs/SwiftDepsExtractor.py %t/deps3.json swiftPrebuiltExternal:A directDependencies | %FileCheck %s --check-prefix TEST3-A
4343
// TEST3-A: "swift": "B"
4444

45-
/// Testable import non-testable build without enable testing.
45+
/// Testable import sees non-testable module first, keep searching.
4646
// RUN: %target-swift-frontend -scan-dependencies -module-load-mode prefer-interface -module-name Test %t/testable.swift \
47-
// RUN: -disable-implicit-string-processing-module-import -disable-implicit-concurrency-module-import -parse-stdlib \
48-
// RUN: -o %t/deps4.json -I %t/regular -swift-version 5
47+
// RUN: -disable-implicit-string-processing-module-import -disable-implicit-concurrency-module-import -parse-stdlib -enable-testing \
48+
// RUN: -o %t/deps4.json -I %t/regular -I %t/testable -I %t/internal -swift-version 5 -Rmodule-loading 2>&1 | %FileCheck %s --check-prefix WARN
4949
// RUN: %{python} %S/../CAS/Inputs/SwiftDepsExtractor.py %t/deps4.json Test directDependencies | %FileCheck %s --check-prefix TEST4
5050
// TEST4: "swiftPrebuiltExternal": "A"
51-
// RUN: %{python} %S/../CAS/Inputs/SwiftDepsExtractor.py %t/deps4.json swiftPrebuiltExternal:A directDependencies | %FileCheck %s --check-prefix EMPTY --allow-empty
51+
// RUN: %{python} %S/../CAS/Inputs/SwiftDepsExtractor.py %t/deps4.json swiftPrebuiltExternal:A directDependencies | %FileCheck %s --check-prefix TEST4-A
52+
// TEST4-A: "swift": "B"
5253

53-
/// Testable import non-testable build enable testing, still succeed since swift-frontend can provide a better diagnostics when the module is actually imported.
54+
/// Testable import non-testable build enable testing, warning about the finding then error out.
5455
// RUN: %target-swift-frontend -scan-dependencies -module-load-mode prefer-interface -module-name Test %t/testable.swift \
5556
// RUN: -disable-implicit-string-processing-module-import -disable-implicit-concurrency-module-import -parse-stdlib -enable-testing \
56-
// RUN: -o %t/deps5.json -I %t/regular -swift-version 5 -Rmodule-loading
57+
// RUN: -o %t/deps5.json -I %t/regular -swift-version 5 -Rmodule-loading 2>&1 | %FileCheck %s --check-prefix WARN --check-prefix ERROR
58+
// WARN: warning: ignore swiftmodule built without '-enable-testing'
59+
// ERROR: error: Unable to find module dependency: 'A'
5760

5861
/// Regular import a testable module with no interface, don't load optional dependencies.
5962
// RUN: rm %t/testable/A.swiftinterface

0 commit comments

Comments
 (0)