[Serialization] Recover from deserialization failures in ModuleFile::lookupObjCMethods

This was reported by deserialization safety in:

Interpreter/SDK/Foundation_NSString.swift
This commit is contained in:
Alexis Laferrière
2023-01-05 03:12:33 -08:00
parent 88d796b4f2
commit 77d8c464df
2 changed files with 19 additions and 2 deletions

View File

@@ -885,8 +885,13 @@ void ModuleFile::lookupObjCMethods(
auto found = *known;
for (const auto &result : found) {
// Deserialize the method and add it to the list.
if (auto func = dyn_cast_or_null<AbstractFunctionDecl>(
getDecl(std::get<2>(result))))
auto declOrError = getDeclChecked(std::get<2>(result));
if (!declOrError) {
consumeError(declOrError.takeError());
continue;
}
if (auto func = dyn_cast_or_null<AbstractFunctionDecl>(declOrError.get()))
results.push_back(func);
}
}