diff --git a/lib/Serialization/Deserialization.cpp b/lib/Serialization/Deserialization.cpp index 755e38e5800b2..67b08e8fb7d01 100644 --- a/lib/Serialization/Deserialization.cpp +++ b/lib/Serialization/Deserialization.cpp @@ -1659,8 +1659,11 @@ ModuleFile::resolveCrossReference(ModuleDecl *baseModule, uint32_t pathLen) { } } else if (auto alias = dyn_cast(base)) { paramList = alias->getGenericParams(); - } else if (auto fn = dyn_cast(base)) + } else if (auto fn = dyn_cast(base)) { paramList = fn->getGenericParams(); + } else if (auto subscript = dyn_cast(base)) { + paramList = subscript->getGenericParams(); + } if (!paramList) { return llvm::make_error( diff --git a/test/Serialization/Inputs/has_generic_subscript.swift b/test/Serialization/Inputs/has_generic_subscript.swift index ca06220592b20..f4001377d0000 100644 --- a/test/Serialization/Inputs/has_generic_subscript.swift +++ b/test/Serialization/Inputs/has_generic_subscript.swift @@ -8,6 +8,7 @@ public struct GenericSubscript { set { } } } +extension GenericSubscript: GenericSubscriptProto {} public struct Outer { public struct Inner { diff --git a/test/Serialization/Inputs/has_generic_subscript_proto.swift b/test/Serialization/Inputs/has_generic_subscript_proto.swift new file mode 100644 index 0000000000000..2f376a4829920 --- /dev/null +++ b/test/Serialization/Inputs/has_generic_subscript_proto.swift @@ -0,0 +1,3 @@ +public protocol GenericSubscriptProto { + subscript(k: K) -> V { get set } +} diff --git a/test/Serialization/generic_subscript.swift b/test/Serialization/generic_subscript.swift index aec418a734b58..3e23662e833ba 100644 --- a/test/Serialization/generic_subscript.swift +++ b/test/Serialization/generic_subscript.swift @@ -1,5 +1,5 @@ // RUN: %empty-directory(%t) -// RUN: %target-swift-frontend -emit-module -o %t %S/Inputs/has_generic_subscript.swift +// RUN: %target-build-swift -emit-module -o %t %S/Inputs/has_generic_subscript.swift %S/Inputs/has_generic_subscript_proto.swift -module-name has_generic_subscript // RUN: llvm-bcanalyzer %t/has_generic_subscript.swiftmodule | %FileCheck %s // RUN: %target-swift-frontend -emit-ir -I %t %s -o /dev/null @@ -8,4 +8,5 @@ import has_generic_subscript var sillyDict = GenericSubscript() +_ = sillyDict as GenericSubscriptProto var value: Int = sillyDict["beer"]