Skip to content

Commit cbfb27c

Browse files
authored
Merge pull request #33962 from eeckstein/fix-demangler-5.3
[5.3] Demangler: fix a crash when re-mangling retroactive conformances
2 parents 065ec7b + 5580270 commit cbfb27c

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

lib/Demangling/Remangler.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1473,8 +1473,14 @@ void Remangler::mangleImplFunctionType(Node *node) {
14731473
mangle(PatternSubs->getChild(0));
14741474
Buffer << 'y';
14751475
mangleChildNodes(PatternSubs->getChild(1));
1476-
if (PatternSubs->getNumChildren() >= 3)
1477-
mangleRetroactiveConformance(PatternSubs->getChild(2));
1476+
if (PatternSubs->getNumChildren() >= 3) {
1477+
NodePointer retroactiveConf = PatternSubs->getChild(2);
1478+
if (retroactiveConf->getKind() == Node::Kind::TypeList) {
1479+
mangleChildNodes(retroactiveConf);
1480+
} else {
1481+
mangleRetroactiveConformance(retroactiveConf);
1482+
}
1483+
}
14781484
}
14791485

14801486
Buffer << 'I';

test/Demangle/Inputs/manglings.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,7 @@ _$S3BBBBf0602365061_ ---> _$S3BBBBf0602365061_
329329
_$S3BBBBi0602365061_ ---> _$S3BBBBi0602365061_
330330
_$S3BBBBv0602365061_ ---> _$S3BBBBv0602365061_
331331
_T0lxxxmmmTk ---> _T0lxxxmmmTk
332+
$s3Bar3FooVAA5DrinkVyxGs5Error_pSeRzSERzlyShy4AbcdAHO6MemberVGALSeHPAKSeAAyHC_HCg_ALSEHPAKSEAAyHC_HCg0_Iseggozo_SgWOe ---> outlined consume of @escaping @callee_guaranteed @substituted <A where A: Swift.Decodable, A: Swift.Encodable> (@guaranteed Bar.Foo) -> (@owned Bar.Drink<A>, @error @owned Swift.Error) for <Swift.Set<Abcd.Abcd.Member>>?
332333
$s4Test5ProtoP8IteratorV10collectionAEy_qd__Gqd___tcfc ---> Test.Proto.Iterator.init(collection: A1) -> Test.Proto.Iterator<A1>
333334
$s4test3fooV4blahyAA1SV1fQryFQOy_Qo_AHF ---> test.foo.blah(<<opaque return type of test.S.f() -> some>>.0) -> <<opaque return type of test.S.f() -> some>>.0
334335
$S3nix8MystructV1xACyxGx_tcfc7MyaliasL_ayx__GD ---> Myalias #1 in nix.Mystruct<A>.init(x: A) -> nix.Mystruct<A>

0 commit comments

Comments
 (0)