Skip to content

Commit 559f45e

Browse files
authored
Merge pull request #21615 from DougGregor/runtime-demangle-generic-objc-class-5.0
[5.0] [Runtime] Correctly match demangle tree for generic Objective-C classes.
2 parents 93f7527 + 95d75b5 commit 559f45e

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

include/swift/Demangling/TypeDecoder.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,15 @@ class TypeDecoder {
163163
case NodeKind::BoundGenericClass:
164164
{
165165
#if SWIFT_OBJC_INTEROP
166-
if (Node->getNumChildren() == 2)
167-
if (auto mangledName = getObjCClassOrProtocolName(Node->getChild(0)))
166+
if (Node->getNumChildren() >= 2) {
167+
auto ChildNode = Node->getChild(0);
168+
if (ChildNode->getKind() == NodeKind::Type &&
169+
ChildNode->getNumChildren() > 0)
170+
ChildNode = ChildNode->getChild(0);
171+
172+
if (auto mangledName = getObjCClassOrProtocolName(ChildNode))
168173
return Builder.createObjCClassType(mangledName->str());
174+
}
169175
#endif
170176
LLVM_FALLTHROUGH;
171177
}

test/Runtime/demangleToMetadataObjC.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,9 @@ DemangleToMetadataTests.test("runtime conformance check for @objc protocol inher
108108
expectEqual(F<P3>.self, _typeByName("4main1FCyAA2P3PG")!)
109109
}
110110

111+
DemangleToMetadataTests.test("Objective-C generics") {
112+
expectEqual(NSArray.self, _typeByName("So7NSArrayCySo8NSStringCG")!)
113+
}
114+
111115
runAllTests()
112116

0 commit comments

Comments
 (0)