Skip to content

Commit 4a74c1a

Browse files
committed
[Metadata Reader] Do not assume OpaqueType context descriptor's parent context is always anonymous
1 parent add2681 commit 4a74c1a

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

include/swift/Remote/MetadataReader.h

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ class MetadataReader {
450450
Node::Kind::OpaqueTypeDescriptorSymbolicReference,
451451
context.getResolved().getAddressData());
452452
}
453-
453+
454454
return buildContextMangling(context, dem);
455455
}
456456
case Demangle::SymbolicReferenceKind::AccessorFunctionReference: {
@@ -2766,17 +2766,25 @@ class MetadataReader {
27662766
|| !*parentDescriptorResult
27672767
|| !parentDescriptorResult->isResolved())
27682768
return nullptr;
2769-
2770-
auto mangledNode =
2771-
demangleAnonymousContextName(parentDescriptorResult->getResolved(), dem);
2772-
if (!mangledNode)
2769+
2770+
if (parentDemangling->getKind() == Node::Kind::AnonymousContext) {
2771+
auto mangledNode =
2772+
demangleAnonymousContextName(parentDescriptorResult->getResolved(), dem);
2773+
if (!mangledNode)
2774+
return nullptr;
2775+
if (mangledNode->getKind() == Node::Kind::Global)
2776+
mangledNode = mangledNode->getChild(0);
2777+
2778+
auto opaqueNode = dem.createNode(Node::Kind::OpaqueReturnTypeOf);
2779+
opaqueNode->addChild(mangledNode, dem);
2780+
return opaqueNode;
2781+
} else if (parentDemangling->getKind() == Node::Kind::Module) {
2782+
auto opaqueNode = dem.createNode(Node::Kind::OpaqueReturnTypeOf);
2783+
opaqueNode->addChild(parentDemangling, dem);
2784+
return opaqueNode;
2785+
} else {
27732786
return nullptr;
2774-
if (mangledNode->getKind() == Node::Kind::Global)
2775-
mangledNode = mangledNode->getChild(0);
2776-
2777-
auto opaqueNode = dem.createNode(Node::Kind::OpaqueReturnTypeOf);
2778-
opaqueNode->addChild(mangledNode, dem);
2779-
return opaqueNode;
2787+
}
27802788
}
27812789

27822790
default:

0 commit comments

Comments
 (0)