Skip to content

Commit 2da742e

Browse files
author
Harlan Haskins
authored
Merge pull request #27410 from harlanhaskins/compute-type-before-setting-superclass
[Deserialization] Allow lookup into decls that don't have an interface type yet
2 parents 632399e + 67683d8 commit 2da742e

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

lib/Serialization/Deserialization.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1120,11 +1120,14 @@ static void filterValues(Type expectedTy, ModuleDecl *expectedModule,
11201120

11211121
if (isType != isa<TypeDecl>(value))
11221122
return true;
1123-
auto ifaceTy = value->getInterfaceType();
1124-
if (!ifaceTy)
1125-
return true;
1126-
if (canTy && ifaceTy->getCanonicalType() != canTy)
1127-
return true;
1123+
1124+
// If we're expecting a type, make sure this decl has the expected type.
1125+
if (canTy) {
1126+
auto ifaceTy = value->getInterfaceType();
1127+
if (!ifaceTy || !ifaceTy->isEqual(canTy))
1128+
return true;
1129+
}
1130+
11281131
if (value->isStatic() != isStatic)
11291132
return true;
11301133
if (value->hasClangNode() != importedFromClang)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
extension Subclass {
2+
struct MemberTypeFromOtherFile {}
3+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// RUN: %empty-directory(%t)
2+
3+
// RUN: %target-build-swift -emit-module -o %t/Module.swiftmodule %s %S/Inputs/multi-file-subclass-generic-instantiation-extension.swift
4+
5+
// https://bugs.swift.org/browse/SR-11495
6+
7+
class Superclass<T> {}
8+
class Subclass: Superclass<Subclass.MemberTypeFromOtherFile> {}

0 commit comments

Comments
 (0)