Skip to content

Commit cfad246

Browse files
committed
[Metadata Reader] Do not assume OpaqueType context descriptor's parent context is always anonymous
1 parent 35355af commit cfad246

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: {
@@ -2735,17 +2735,25 @@ class MetadataReader {
27352735
|| !*parentDescriptorResult
27362736
|| !parentDescriptorResult->isResolved())
27372737
return nullptr;
2738-
2739-
auto mangledNode =
2740-
demangleAnonymousContextName(parentDescriptorResult->getResolved(), dem);
2741-
if (!mangledNode)
2738+
2739+
if (parentDemangling->getKind() == Node::Kind::AnonymousContext) {
2740+
auto mangledNode =
2741+
demangleAnonymousContextName(parentDescriptorResult->getResolved(), dem);
2742+
if (!mangledNode)
2743+
return nullptr;
2744+
if (mangledNode->getKind() == Node::Kind::Global)
2745+
mangledNode = mangledNode->getChild(0);
2746+
2747+
auto opaqueNode = dem.createNode(Node::Kind::OpaqueReturnTypeOf);
2748+
opaqueNode->addChild(mangledNode, dem);
2749+
return opaqueNode;
2750+
} else if (parentDemangling->getKind() == Node::Kind::Module) {
2751+
auto opaqueNode = dem.createNode(Node::Kind::OpaqueReturnTypeOf);
2752+
opaqueNode->addChild(parentDemangling, dem);
2753+
return opaqueNode;
2754+
} else {
27422755
return nullptr;
2743-
if (mangledNode->getKind() == Node::Kind::Global)
2744-
mangledNode = mangledNode->getChild(0);
2745-
2746-
auto opaqueNode = dem.createNode(Node::Kind::OpaqueReturnTypeOf);
2747-
opaqueNode->addChild(mangledNode, dem);
2748-
return opaqueNode;
2756+
}
27492757
}
27502758

27512759
default:

0 commit comments

Comments
 (0)