Skip to content

Commit 95be0d6

Browse files
authored
Merge pull request #37997 from al45tair/problem/63678072
[Demangler] Fix OldRemangler to cope with single argument functions.
2 parents 030e0ff + 52ec3d1 commit 95be0d6

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed

lib/Demangling/OldRemangler.cpp

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -175,27 +175,31 @@ static NodePointer applyParamLabels(NodePointer LabelList, NodePointer OrigType,
175175
auto ParamsType = Factory.createNode(Node::Kind::ArgumentTuple);
176176
auto Tuple = Factory.createNode(Node::Kind::Tuple);
177177

178-
auto OrigTuple = ArgTuple->getFirstChild()->getFirstChild();
179-
assert(OrigTuple->getKind() == Node::Kind::Tuple);
180-
181-
for (unsigned i = 0, n = OrigTuple->getNumChildren(); i != n; ++i) {
182-
const auto Label = LabelList->getChild(i);
178+
auto processParameter = [&](NodePointer Label, NodePointer Param) {
183179
if (Label->getKind() == Node::Kind::FirstElementMarker) {
184-
Tuple->addChild(OrigTuple->getChild(i), Factory);
185-
continue;
180+
Tuple->addChild(Param, Factory);
181+
return;
186182
}
187183

188-
auto OrigElt = OrigTuple->getChild(i);
189-
auto NewElt = Factory.createNode(Node::Kind::TupleElement);
190-
191-
NewElt->addChild(Factory.createNodeWithAllocatedText(
184+
auto NewParam = Factory.createNode(Node::Kind::TupleElement);
185+
NewParam->addChild(Factory.createNodeWithAllocatedText(
192186
Node::Kind::TupleElementName, Label->getText()),
193-
Factory);
187+
Factory);
194188

195-
for (auto &Child : *OrigElt)
196-
NewElt->addChild(Child, Factory);
189+
for (auto &Child : *Param)
190+
NewParam->addChild(Child, Factory);
191+
192+
Tuple->addChild(NewParam, Factory);
193+
};
197194

198-
Tuple->addChild(NewElt, Factory);
195+
auto OrigTuple = ArgTuple->getFirstChild()->getFirstChild();
196+
197+
if (OrigTuple->getKind() != Node::Kind::Tuple) {
198+
processParameter(LabelList->getChild(0), OrigTuple);
199+
} else {
200+
for (unsigned i = 0, n = OrigTuple->getNumChildren(); i != n; ++i) {
201+
processParameter(LabelList->getChild(i), OrigTuple->getChild(i));
202+
}
199203
}
200204

201205
auto Type = Factory.createNode(Node::Kind::Type);

test/Demangle/remangle.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ RUN: diff %t.input %t.output
99
// CHECK: Swift.(Mystruct in _7B40D7ED6632C2BEA2CA3BFFD57E3435)
1010
RUN: swift-demangle -remangle-objc-rt '$ss8Mystruct33_7B40D7ED6632C2BEA2CA3BFFD57E3435LLV' | %FileCheck %s
1111

12+
// CHECK-OLD: r in _.?(Swift.UnsafeRawPointer) -> Swift.UnsafeRawPointer
13+
RUN: swift-demangle -remangle-objc-rt '$s1_1?1PSVSVF1rP' | %FileCheck -check-prefix CHECK-OLD %s
14+
1215
// CHECK-OLD2: Swift.Int.related decl 'B' for protocol self-conformance descriptor for Swift.IteratorProtocol
1316
RUN: swift-demangle -remangle-objc-rt '$sSiStMSLB_p' | %FileCheck -check-prefix CHECK-OLD2 %s
1417

@@ -20,4 +23,3 @@ RUN: swift-demangle -remangle-objc-rt '$sSIxip6foobarP' | %FileCheck -check-pref
2023

2124
// CHECK-GENERICEXT: Swift._ContiguousArrayStorage<(extension in Swift):Swift.FlattenSequence<StdlibCollectionUnittest.MinimalBidirectionalCollection<StdlibCollectionUnittest.MinimalBidirectionalCollection<Swift.Int>>>.Index>
2225
RUN: swift-demangle -remangle-objc-rt '$ss23_ContiguousArrayStorageCys15FlattenSequenceVsE5IndexVy24StdlibCollectionUnittest020MinimalBidirectionalH0VyAIySiGG_GGD' | %FileCheck -check-prefix CHECK-GENERICEXT %s
23-

0 commit comments

Comments
 (0)