Skip to content

Commit f690a9e

Browse files
committed
Also search nested types tables in overlay modules
1 parent d1823eb commit f690a9e

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

lib/Serialization/Deserialization.cpp

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1207,6 +1207,21 @@ static void filterValues(Type expectedTy, ModuleDecl *expectedModule,
12071207
values.erase(newEnd, values.end());
12081208
}
12091209

1210+
static TypeDecl *
1211+
findNestedTypeDeclInModule(FileUnit *thisFile, ModuleDecl *extensionModule,
1212+
Identifier name, NominalTypeDecl *parent) {
1213+
assert(extensionModule && "NULL is not a valid module");
1214+
for (FileUnit *file : extensionModule->getFiles()) {
1215+
if (file == thisFile)
1216+
continue;
1217+
1218+
if (auto nestedType = file->lookupNestedType(name, parent)) {
1219+
return nestedType;
1220+
}
1221+
}
1222+
return nullptr;
1223+
}
1224+
12101225
Expected<Decl *>
12111226
ModuleFile::resolveCrossReference(ModuleID MID, uint32_t pathLen) {
12121227
using namespace decls_block;
@@ -1442,13 +1457,19 @@ ModuleFile::resolveCrossReference(ModuleID MID, uint32_t pathLen) {
14421457

14431458
// Fault in extensions, then ask every file in the module.
14441459
(void)baseType->getExtensions();
1445-
TypeDecl *nestedType = nullptr;
1446-
for (FileUnit *file : extensionModule->getFiles()) {
1447-
if (file == getFile())
1448-
continue;
1449-
nestedType = file->lookupNestedType(memberName, baseType);
1450-
if (nestedType)
1451-
break;
1460+
auto *nestedType =
1461+
findNestedTypeDeclInModule(getFile(), extensionModule,
1462+
memberName, baseType);
1463+
1464+
// For clang module units, also search tables in the overlays.
1465+
if (!nestedType) {
1466+
if (auto LF =
1467+
dyn_cast<LoadedFile>(baseType->getModuleScopeContext())) {
1468+
if (auto overlayModule = LF->getOverlayModule()) {
1469+
nestedType = findNestedTypeDeclInModule(getFile(), overlayModule,
1470+
memberName, baseType);
1471+
}
1472+
}
14521473
}
14531474

14541475
if (nestedType) {

0 commit comments

Comments
 (0)