Skip to content

Commit d09c906

Browse files
author
David Ungar
committed
Fix overly conservative fingerprint bug & fix tests.
1 parent 62e0da9 commit d09c906

File tree

12 files changed

+62
-57
lines changed

12 files changed

+62
-57
lines changed

lib/AST/AbstractSourceFileDepGraphFactory.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,14 @@ void AbstractSourceFileDepGraphFactory::addAUsedDecl(
7979
const DependencyKey &defKey, const DependencyKey &useKey) {
8080
auto *defNode =
8181
g.findExistingNodeOrCreateIfNew(defKey, None, false /* = !isProvides */);
82+
// If the depended-upon node is defined in this file, then don't
83+
// create an arc to the user, when the user is the whole file.
84+
// Otherwise, if the defNode's type-body fingerprint changes,
85+
// the whole file will be marked as dirty, losing the benefit of the
86+
// fingerprint.
87+
if (defNode->getIsProvides() &&
88+
useKey.getKind() == NodeKind::sourceFileProvide)
89+
return;
8290
auto nullableUse = g.findExistingNode(useKey);
8391
assert(nullableUse.isNonNull() && "Use must be an already-added provides");
8492
auto *useNode = nullableUse.get();

test/Frontend/Inputs/type-fingerprint/a.swift

Lines changed: 0 additions & 3 deletions
This file was deleted.

test/Frontend/Inputs/type-fingerprint/b0.swift

Lines changed: 0 additions & 6 deletions
This file was deleted.

test/Frontend/Inputs/type-fingerprint/b1.swift

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
struct A {
2+
var x = 17
3+
}
4+
struct B {
5+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
struct A {
2+
}
3+
struct B {
4+
}
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
1-
func foo() {
2-
B1()
3-
}
1+
Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
{
2-
"./a.swift": {
3-
"object": "./a.o",
4-
"swift-dependencies": "./a.swiftdeps"
5-
},
6-
"./b.swift": {
7-
"object": "./b.o",
8-
"swift-dependencies": "./b.swiftdeps"
9-
},
10-
"./main.swift": {
2+
"main.swift": {
113
"object": "./main.o",
124
"swift-dependencies": "./main.swiftdeps"
135
},
6+
"definesAB.swift": {
7+
"object": "./definesAB.o",
8+
"swift-dependencies": "./definesAB.swiftdeps"
9+
},
10+
"usesA.swift": {
11+
"object": "./usesA.o",
12+
"swift-dependencies": "./usesA.swiftdeps"
13+
},
14+
"usesB.swift": {
15+
"object": "./usesB.o",
16+
"swift-dependencies": "./usesB.swiftdeps"
17+
},
1418
"": {
1519
"swift-dependencies": "./main~buildrecord.swiftdeps"
1620
}
1721
}
22+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
let a = A()
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
let b = B()

0 commit comments

Comments
 (0)