Skip to content

Commit dbe4b6d

Browse files
author
David Ungar
committed
Fix fingerprints in unit tests of driver.
1 parent f17ad10 commit dbe4b6d

File tree

4 files changed

+27
-15
lines changed

4 files changed

+27
-15
lines changed

include/swift/Basic/Fingerprint.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ class Fingerprint final {
7676
/// Strings that violate this invariant will return a null optional.
7777
static llvm::Optional<Fingerprint> fromString(llvm::StringRef value);
7878

79+
/// For mocking only:
80+
/// Aborts if unconvertible, returns None for an empty string.
81+
static llvm::Optional<Fingerprint> mockFromString(llvm::StringRef value);
82+
7983
/// Creates a fingerprint value by consuming the given \c MD5Result from LLVM.
8084
explicit Fingerprint(llvm::MD5::MD5Result &&MD5Value)
8185
: core{MD5Value.words()} {}

lib/Basic/Fingerprint.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,24 @@ Optional<Fingerprint> Fingerprint::fromString(StringRef value) {
4848
return fp;
4949
}
5050

51+
Optional<Fingerprint> Fingerprint::mockFromString(llvm::StringRef value) {
52+
auto contents = value.str();
53+
const auto n = value.size();
54+
if (n == 0 || n > Fingerprint::DIGEST_LENGTH)
55+
return None;
56+
// Insert at start so that "1" and "10" are distinct
57+
contents.insert(0, Fingerprint::DIGEST_LENGTH - n, '0');
58+
auto fingerprint = fromString(contents);
59+
if (!fingerprint) {
60+
llvm::errs() << "unconvertable fingerprint from switdeps ':"
61+
<< contents << "'\n";
62+
abort();
63+
}
64+
return fingerprint;
65+
}
66+
67+
68+
5169
llvm::SmallString<Fingerprint::DIGEST_LENGTH> Fingerprint::getRawValue() const {
5270
llvm::SmallString<Fingerprint::DIGEST_LENGTH> Str;
5371
llvm::raw_svector_ostream Res(Str);

unittests/Driver/MockingFineGrainedDependencyGraphs.cpp

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,9 @@ mocking_fine_grained_dependency_graphs::getChangesForSimulatedLoad(
4242
const bool hadCompilationError) {
4343
auto swiftDeps =
4444
cmd->getOutput().getAdditionalOutputForType(file_types::TY_SwiftDeps).str();
45-
assert(!swiftDeps.empty());
46-
// Insert at start so that "1" and "10" are distinct
47-
swiftDeps.insert(0, Fingerprint::DIGEST_LENGTH - swiftDeps.size(), '0');
48-
auto swiftDepsFingerprint = Fingerprint::fromString(swiftDeps);
49-
if (!swiftDepsFingerprint) {
50-
llvm::errs() << "unconvertable fingerprint from switdeps ':"
51-
<< swiftDeps << "'\n";
52-
abort();
53-
}
54-
auto interfaceHash =
55-
interfaceHashIfNonEmpty.getValueOr(swiftDepsFingerprint.getValue());
45+
auto swiftDepsFingerprint =
46+
Fingerprint::mockFromString(swiftDeps).getValue();
47+
auto interfaceHash = interfaceHashIfNonEmpty.getValueOr(swiftDepsFingerprint);
5648

5749
SourceManager sm;
5850
DiagnosticEngine diags(sm);

unittests/Driver/UnitTestSourceFileDepGraphFactory.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,8 @@ void UnitTestSourceFileDepGraphFactory::addADefinedDecl(StringRef s,
5454
if (!key)
5555
return;
5656
auto fingerprintString = s.split(fingerprintSeparator).second.str();
57-
fingerprintString.resize(Fingerprint::DIGEST_LENGTH, 'X');
58-
const Optional<Fingerprint> fingerprint = fingerprintString.empty()
59-
? Optional<Fingerprint>()
60-
: Fingerprint::fromString(fingerprintString);
57+
const Optional<Fingerprint> fingerprint =
58+
Fingerprint::mockFromString(fingerprintString);
6159

6260
AbstractSourceFileDepGraphFactory::addADefinedDecl(key.getValue(),
6361
fingerprint);

0 commit comments

Comments
 (0)