Skip to content

Commit bcc1ed2

Browse files
authored
[Serialization] Slightly improve cross-reference failure crash traces (#17148)
Trade a tiny bit of speed in the happy path for a more sensible result, and make sure to preserve the information about what was being looked up when a cross-reference turns out to be ambiguous. No intended functionality change.
1 parent 23d7ab1 commit bcc1ed2

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

lib/Serialization/Deserialization.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1603,10 +1603,12 @@ ModuleFile::resolveCrossReference(ModuleDecl *baseModule, uint32_t pathLen) {
16031603
uint8_t rawKind;
16041604
XRefOperatorOrAccessorPathPieceLayout::readRecord(scratch, None,
16051605
rawKind);
1606+
if (values.empty())
1607+
break;
16061608

1607-
if (values.size() == 1) {
1609+
if (!values.front()->getBaseName().isOperator()) {
1610+
pathTrace.addAccessor(rawKind);
16081611
if (auto storage = dyn_cast<AbstractStorageDecl>(values.front())) {
1609-
pathTrace.addAccessor(rawKind);
16101612
switch (rawKind) {
16111613
case Getter:
16121614
values.front() = storage->getGetter();
@@ -1631,9 +1633,8 @@ ModuleFile::resolveCrossReference(ModuleDecl *baseModule, uint32_t pathLen) {
16311633
error();
16321634
return nullptr;
16331635
}
1634-
1635-
break;
16361636
}
1637+
break;
16371638
}
16381639

16391640
pathTrace.addOperatorFilter(rawKind);
@@ -1745,9 +1746,8 @@ ModuleFile::resolveCrossReference(ModuleDecl *baseModule, uint32_t pathLen) {
17451746

17461747
// When all is said and done, we should have a single value here to return.
17471748
if (values.size() != 1) {
1748-
return llvm::make_error<llvm::StringError>(
1749-
"result is ambiguous",
1750-
std::error_code(EINVAL, std::generic_category()));
1749+
return llvm::make_error<XRefError>("result is ambiguous", pathTrace,
1750+
getXRefDeclNameForError());
17511751
}
17521752

17531753
return values.front();

0 commit comments

Comments
 (0)