Skip to content

Commit 3439f81

Browse files
Merge pull request #85907 from augusto2112/fix-private-disc-6.3
"[RemoteInspection] Read ContextDescriptor from symbol if available" and "[RemoteInspection] Factor out buildContextDescriptorManglingForSymbol"
2 parents 0895357 + 9d2a0f5 commit 3439f81

File tree

1 file changed

+33
-9
lines changed

1 file changed

+33
-9
lines changed

include/swift/Remote/MetadataReader.h

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2659,6 +2659,26 @@ class MetadataReader {
26592659
return resultAddress;
26602660
}
26612661

2662+
Demangle::NodePointer
2663+
buildContextDescriptorManglingForSymbol(llvm::StringRef symbol,
2664+
Demangler &dem) {
2665+
if (auto demangledSymbol = buildContextManglingForSymbol(symbol, dem)) {
2666+
// Look through Type nodes since we're building up a mangling here.
2667+
if (demangledSymbol->getKind() == Demangle::Node::Kind::Type) {
2668+
demangledSymbol = demangledSymbol->getChild(0);
2669+
}
2670+
return demangledSymbol;
2671+
}
2672+
2673+
return nullptr;
2674+
}
2675+
2676+
Demangle::NodePointer
2677+
buildContextDescriptorManglingForSymbol(const std::string &symbol,
2678+
Demangler &dem) {
2679+
return buildContextDescriptorManglingForSymbol(dem.copyString(symbol), dem);
2680+
}
2681+
26622682
Demangle::NodePointer
26632683
buildContextDescriptorMangling(const ParentContextDescriptorRef &descriptor,
26642684
Demangler &dem, int recursion_limit) {
@@ -2672,15 +2692,7 @@ class MetadataReader {
26722692

26732693
// Try to demangle the symbol name to figure out what context it would
26742694
// point to.
2675-
auto demangledSymbol = buildContextManglingForSymbol(descriptor.getSymbol(),
2676-
dem);
2677-
if (!demangledSymbol)
2678-
return nullptr;
2679-
// Look through Type notes since we're building up a mangling here.
2680-
if (demangledSymbol->getKind() == Demangle::Node::Kind::Type){
2681-
demangledSymbol = demangledSymbol->getChild(0);
2682-
}
2683-
return demangledSymbol;
2695+
return buildContextDescriptorManglingForSymbol(descriptor.getSymbol(), dem);
26842696
}
26852697

26862698
Demangle::NodePointer
@@ -2690,6 +2702,18 @@ class MetadataReader {
26902702
return nullptr;
26912703
}
26922704

2705+
// Check if the Reader can provide a symbol for this descriptor, and if it
2706+
// can, use that instead.
2707+
if (auto remoteAbsolutePointer =
2708+
Reader->resolvePointerAsSymbol(descriptor.getRemoteAddress())) {
2709+
auto symbol = remoteAbsolutePointer->getSymbol();
2710+
if (!symbol.empty()) {
2711+
if (auto demangledSymbol = buildContextDescriptorManglingForSymbol(symbol, dem)) {
2712+
return demangledSymbol;
2713+
}
2714+
}
2715+
}
2716+
26932717
// Read the parent descriptor.
26942718
auto parentDescriptorResult = readParentContextDescriptor(descriptor);
26952719

0 commit comments

Comments
 (0)