Skip to content

Commit 58d91e2

Browse files
committed
Print Module Fingerprints in swift-ide-test
1 parent 9141ddf commit 58d91e2

File tree

8 files changed

+84
-0
lines changed

8 files changed

+84
-0
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"A.swift": {
3+
"object": "./A.o",
4+
"swift-dependencies": "./A.swiftdeps",
5+
"swiftmodule": "./A~partial.swiftmodule",
6+
"swiftdoc": "./A.swiftdoc"
7+
},
8+
"": {
9+
"swift-dependencies": "./A~buildrecord.swiftdeps"
10+
}
11+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import B
2+
import C
3+
4+
public func use() {
5+
fromB()
6+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"B.swift": {
3+
"object": "./B.o",
4+
"swift-dependencies": "./B.swiftdeps",
5+
"swiftmodule": "./B~partial.swiftmodule",
6+
"swiftdoc": "./B.swiftdoc"
7+
},
8+
"": {
9+
"swift-dependencies": "./B~buildrecord.swiftdeps"
10+
}
11+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import C
2+
3+
public func fromB() {
4+
return fromC()
5+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"C.swift": {
3+
"object": "./C.o",
4+
"swift-dependencies": "./C.swiftdeps",
5+
"swiftmodule": "./C~partial.swiftmodule",
6+
"swiftdoc": "./C.swiftdoc"
7+
},
8+
"": {
9+
"swift-dependencies": "./C~buildrecord.swiftdeps"
10+
}
11+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
public func fromC(parameter: Int = 0) {}
2+
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: cp -r %S/Inputs/module-fingerprint/* %t
3+
4+
//
5+
// Set up a clean incremental build of all three modules
6+
//
7+
8+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/C.swiftmodule -enable-experimental-cross-module-incremental-build -module-name C -I %t -output-file-map %t/C.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle C.swift
9+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/B.swiftmodule -enable-experimental-cross-module-incremental-build -module-name B -I %t -output-file-map %t/B.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle B.swift
10+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/A.swiftmodule -enable-experimental-cross-module-incremental-build -module-name A -I %t -output-file-map %t/A.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle A.swift
11+
12+
// RUN: %target-swift-ide-test -print-module-metadata -module-to-print C -enable-swiftsourceinfo -I %t -source-filename %s | %FileCheck %s --check-prefix=CHECK-CLEAN-C
13+
// RUN: %target-swift-ide-test -print-module-metadata -module-to-print B -enable-swiftsourceinfo -I %t -source-filename %s | %FileCheck %s --check-prefix=CHECK-CLEAN-B
14+
// RUN: %target-swift-ide-test -print-module-metadata -module-to-print A -enable-swiftsourceinfo -I %t -source-filename %s | %FileCheck %s --check-prefix=CHECK-CLEAN-A
15+
16+
// CHECK-CLEAN-C: fingerprint=6e60fd224d614a59568a348e0ac9b55a
17+
// CHECK-CLEAN-B: fingerprint=bfa14052e1df9253b7bf7e0eb7cfc505
18+
// CHECK-CLEAN-A: fingerprint=a939d89f07c766a4607c5fe1a1715cf5
19+
20+
//
21+
// Now change C and ensure that B rebuilds but A does not
22+
//
23+
24+
// RUN: cd %t && echo "public func other() {}" >> C.swift
25+
26+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/C.swiftmodule -enable-experimental-cross-module-incremental-build -module-name C -I %t -output-file-map %t/C.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle C.swift
27+
// RUN: touch %t/C.swiftmodule
28+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/B.swiftmodule -enable-experimental-cross-module-incremental-build -module-name B -I %t -output-file-map %t/B.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle B.swift
29+
// RUN: cd %t && %target-swiftc_driver -c -incremental -emit-dependencies -emit-module -emit-module-path %t/A.swiftmodule -enable-experimental-cross-module-incremental-build -module-name A -I %t -output-file-map %t/A.json -working-directory %t -driver-show-incremental -driver-show-job-lifecycle A.swift
30+
31+
// RUN: %target-swift-ide-test -print-module-metadata -module-to-print C -enable-swiftsourceinfo -I %t -source-filename %s | %FileCheck %s --check-prefix=CHECK-INCREMENTAL-C
32+
// RUN: %target-swift-ide-test -print-module-metadata -module-to-print B -enable-swiftsourceinfo -I %t -source-filename %s | %FileCheck %s --check-prefix=CHECK-INCREMENTAL-B
33+
// RUN: %target-swift-ide-test -print-module-metadata -module-to-print A -enable-swiftsourceinfo -I %t -source-filename %s | %FileCheck %s --check-prefix=CHECK-INCREMENTAL-A
34+
35+
// CHECK-INCREMENTAL-C: fingerprint=3e68d59b74032e18401ec978cdb11cf3
36+
// CHECK-INCREMENTAL-B: fingerprint=bfa14052e1df9253b7bf7e0eb7cfc505
37+
// CHECK-INCREMENTAL-A: fingerprint=a939d89f07c766a4607c5fe1a1715cf5

tools/swift-ide-test/swift-ide-test.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2516,6 +2516,7 @@ static int doPrintModuleGroups(const CompilerInvocation &InitInvok,
25162516

25172517
static void printModuleMetadata(ModuleDecl *MD) {
25182518
auto &OS = llvm::outs();
2519+
OS << "fingerprint=" << MD->getFingerprint().getRawValue() << "\n";
25192520
MD->collectLinkLibraries([&](LinkLibrary lib) {
25202521
OS << "link library: " << lib.getName()
25212522
<< ", force load: " << (lib.shouldForceLoad() ? "true" : "false") << "\n";

0 commit comments

Comments
 (0)