@@ -263,7 +263,9 @@ _findExtendedTypeContextDescriptor(const ExtensionContextDescriptor *extension,
263
263
return nullptr ;
264
264
node = node->getChild (0 );
265
265
}
266
- node = Demangle::getUnspecialized (node, demangler);
266
+ if (Demangle::isSpecialized (node)) {
267
+ node = Demangle::getUnspecialized (node, demangler);
268
+ }
267
269
268
270
return _findNominalTypeDescriptor (node, demangler);
269
271
}
@@ -839,15 +841,17 @@ bool swift::_gatherGenericParameterCounts(
839
841
const ContextDescriptor *descriptor,
840
842
SmallVectorImpl<unsigned > &genericParamCounts,
841
843
Demangler &BorrowFrom) {
842
- // If we have an extension descriptor, extract the extended type and use
843
- // that.
844
844
DemanglerForRuntimeTypeResolution<> demangler;
845
845
demangler.providePreallocatedMemory (BorrowFrom);
846
846
847
847
if (auto extension = dyn_cast<ExtensionContextDescriptor>(descriptor)) {
848
+ // If we have an nominal type extension descriptor, extract the extended type
849
+ // and use that. If the extension is not nominal, then we can use the
850
+ // extension's own signature.
848
851
if (auto extendedType =
849
- _findExtendedTypeContextDescriptor (extension, demangler))
852
+ _findExtendedTypeContextDescriptor (extension, demangler)) {
850
853
descriptor = extendedType;
854
+ }
851
855
}
852
856
853
857
// Once we hit a non-generic descriptor, we're done.
0 commit comments