From 42e74f28c001ca2a8fd22a9697338ff7c804cc98 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 14 Apr 2019 17:59:55 -0400 Subject: [PATCH] Demangle: Add node for reabstraction thunk capturing DynamicSelfType Also, NodePrinter was printing the 'from' and 'to' type backwards, so fix that. --- docs/ABI/Mangling.rst | 12 ++++--- include/swift/Demangling/DemangleNodes.def | 1 + lib/Demangling/Demangler.cpp | 19 +++++++----- lib/Demangling/NodePrinter.cpp | 31 +++++++++++++++---- lib/Demangling/OldRemangler.cpp | 12 +++---- lib/Demangling/Remangler.cpp | 21 +++++-------- test/Demangle/Inputs/manglings.txt | 17 +++++----- test/Demangle/Inputs/simplified-manglings.txt | 16 +++++----- 8 files changed, 75 insertions(+), 54 deletions(-) diff --git a/docs/ABI/Mangling.rst b/docs/ABI/Mangling.rst index ec645998b1ab3..d35e5fed49b97 100644 --- a/docs/ABI/Mangling.rst +++ b/docs/ABI/Mangling.rst @@ -191,7 +191,9 @@ types where the metadata itself has unknown layout.) global ::= global specialization // function specialization global ::= global 'Tm' // merged function global ::= entity // some identifiable thing - global ::= type type generic-signature? 'T' REABSTRACT-THUNK-TYPE // reabstraction thunk helper function + global ::= from-type to-type generic-signature? 'TR' // reabstraction thunk + global ::= from-type to-type self-type generic-signature? 'Ty' // reabstraction thunk with dynamic 'Self' capture + global ::= from-type to-type generic-signature? 'Tr' // obsolete mangling for reabstraction thunk global ::= entity generic-signature? type type* 'TK' // key path getter global ::= entity generic-signature? type type* 'Tk' // key path setter global ::= type generic-signature 'TH' // key path equality @@ -204,11 +206,11 @@ types where the metadata itself has unknown layout.) global ::= type assoc-type-list protocol 'TN' // default associated conformance witness accessor global ::= type protocol 'Tb' // base conformance descriptor - REABSTRACT-THUNK-TYPE ::= 'R' // reabstraction thunk helper function - REABSTRACT-THUNK-TYPE ::= 'r' // reabstraction thunk + REABSTRACT-THUNK-TYPE ::= 'R' // reabstraction thunk + REABSTRACT-THUNK-TYPE ::= 'r' // reabstraction thunk (obsolete) -The types in a reabstraction thunk helper function are always non-polymorphic -```` types. +The `from-type` and `to-type` in a reabstraction thunk helper function +are always non-polymorphic ```` types. :: diff --git a/include/swift/Demangling/DemangleNodes.def b/include/swift/Demangling/DemangleNodes.def index dec6c390e65ff..1b6f73af669c0 100644 --- a/include/swift/Demangling/DemangleNodes.def +++ b/include/swift/Demangling/DemangleNodes.def @@ -176,6 +176,7 @@ NODE(ProtocolWitnessTableAccessor) NODE(ProtocolWitnessTablePattern) NODE(ReabstractionThunk) NODE(ReabstractionThunkHelper) +NODE(ReabstractionThunkHelperWithSelf) CONTEXT_NODE(ReadAccessor) NODE(RelatedEntityDeclName) NODE(RetroactiveConformance) diff --git a/lib/Demangling/Demangler.cpp b/lib/Demangling/Demangler.cpp index 57487d40b62ab..f4a08a44fa1b3 100644 --- a/lib/Demangling/Demangler.cpp +++ b/lib/Demangling/Demangler.cpp @@ -2057,15 +2057,20 @@ NodePointer Demangler::demangleThunkOrSpecialization() { return createWithChild(Node::Kind::ProtocolSelfConformanceWitness, popNode(isEntity)); case 'R': - case 'r': { - NodePointer Thunk = createNode(c == 'R' ? - Node::Kind::ReabstractionThunkHelper : - Node::Kind::ReabstractionThunk); + case 'r': + case 'y': { + Node::Kind kind; + if (c == 'R') kind = Node::Kind::ReabstractionThunkHelper; + else if (c == 'y') kind = Node::Kind::ReabstractionThunkHelperWithSelf; + else kind = Node::Kind::ReabstractionThunk; + NodePointer Thunk = createNode(kind); if (NodePointer GenSig = popNode(Node::Kind::DependentGenericSignature)) addChild(Thunk, GenSig); - NodePointer Ty2 = popNode(Node::Kind::Type); - Thunk = addChild(Thunk, popNode(Node::Kind::Type)); - return addChild(Thunk, Ty2); + if (kind == Node::Kind::ReabstractionThunkHelperWithSelf) + addChild(Thunk, popNode(Node::Kind::Type)); + addChild(Thunk, popNode(Node::Kind::Type)); + addChild(Thunk, popNode(Node::Kind::Type)); + return Thunk; } case 'g': return demangleGenericSpecialization(Node::Kind::GenericSpecialization); diff --git a/lib/Demangling/NodePrinter.cpp b/lib/Demangling/NodePrinter.cpp index 8a2babce1d948..24f513e2f202c 100644 --- a/lib/Demangling/NodePrinter.cpp +++ b/lib/Demangling/NodePrinter.cpp @@ -435,6 +435,7 @@ class NodePrinter { case Node::Kind::ProtocolWitnessTablePattern: case Node::Kind::ReabstractionThunk: case Node::Kind::ReabstractionThunkHelper: + case Node::Kind::ReabstractionThunkHelperWithSelf: case Node::Kind::ReadAccessor: case Node::Kind::RelatedEntityDeclName: case Node::Kind::RetroactiveConformance: @@ -1536,22 +1537,40 @@ NodePointer NodePrinter::print(NodePointer Node, bool asPrefixContext) { case Node::Kind::ReabstractionThunkHelper: { if (Options.ShortenThunk) { Printer << "thunk for "; - print(Node->getChild(Node->getNumChildren() - 2)); + print(Node->getChild(Node->getNumChildren() - 1)); return nullptr; } Printer << "reabstraction thunk "; if (Node->getKind() == Node::Kind::ReabstractionThunkHelper) Printer << "helper "; - auto generics = getFirstChildOfKind(Node, Node::Kind::DependentGenericSignature); - assert(Node->getNumChildren() == 2 + unsigned(generics != nullptr)); - if (generics) { + unsigned idx = 0; + if (Node->getNumChildren() == 3) { + auto generics = Node->getChild(0); + idx = 1; + print(generics); + Printer << " "; + } + Printer << "from "; + print(Node->getChild(idx + 1)); + Printer << " to "; + print(Node->getChild(idx)); + return nullptr; + } + case Node::Kind::ReabstractionThunkHelperWithSelf: { + Printer << "reabstraction thunk "; + unsigned idx = 0; + if (Node->getNumChildren() == 4) { + auto generics = Node->getChild(0); + idx = 1; print(generics); Printer << " "; } Printer << "from "; - print(Node->getChild(Node->getNumChildren() - 2)); + print(Node->getChild(idx + 2)); Printer << " to "; - print(Node->getChild(Node->getNumChildren() - 1)); + print(Node->getChild(idx + 1)); + Printer << " self "; + print(Node->getChild(idx)); return nullptr; } case Node::Kind::MergedFunction: diff --git a/lib/Demangling/OldRemangler.cpp b/lib/Demangling/OldRemangler.cpp index 58f07aecd0f0e..c90644927ddc6 100644 --- a/lib/Demangling/OldRemangler.cpp +++ b/lib/Demangling/OldRemangler.cpp @@ -715,15 +715,15 @@ void Remangler::mangleBaseWitnessTableAccessor(Node *node) { } void Remangler::mangleReabstractionThunkHelper(Node *node) { - Buffer << "TR"; - if (node->getNumChildren() == 3) Buffer << 'G'; - mangleChildNodes(node); // generic signature?, type, type + Buffer << ""; +} + +void Remangler::mangleReabstractionThunkHelperWithSelf(Node *node) { + Buffer << ""; } void Remangler::mangleReabstractionThunk(Node *node) { - Buffer << "Tr"; - if (node->getNumChildren() == 3) Buffer << 'G'; - mangleChildNodes(node); // generic signature?, type, type + Buffer << ""; } void Remangler::mangleProtocolSelfConformanceWitness(Node *node) { diff --git a/lib/Demangling/Remangler.cpp b/lib/Demangling/Remangler.cpp index d2cdefcf286f1..0fba0eb9fa0e8 100644 --- a/lib/Demangling/Remangler.cpp +++ b/lib/Demangling/Remangler.cpp @@ -1856,27 +1856,20 @@ void Remangler::mangleProtocolWitnessTableAccessor(Node *node) { } void Remangler::mangleReabstractionThunk(Node *node) { - if (node->getNumChildren() == 3) { - mangleChildNode(node, 1); // type 1 - mangleChildNode(node, 2); // type 2 - mangleChildNode(node, 0); // generic signature - } else { - mangleChildNodes(node); - } + mangleChildNodesReversed(node); Buffer << "Tr"; } void Remangler::mangleReabstractionThunkHelper(Node *node) { - if (node->getNumChildren() == 3) { - mangleChildNode(node, 1); // type 1 - mangleChildNode(node, 2); // type 2 - mangleChildNode(node, 0); // generic signature - } else { - mangleChildNodes(node); - } + mangleChildNodesReversed(node); Buffer << "TR"; } +void Remangler::mangleReabstractionThunkHelperWithSelf(Node *node) { + mangleChildNodesReversed(node); + Buffer << "Ty"; +} + void Remangler::mangleReadAccessor(Node *node) { mangleAbstractStorage(node->getFirstChild(), "r"); } diff --git a/test/Demangle/Inputs/manglings.txt b/test/Demangle/Inputs/manglings.txt index c479fbf6f2b20..8e392ff7b9dcf 100644 --- a/test/Demangle/Inputs/manglings.txt +++ b/test/Demangle/Inputs/manglings.txt @@ -173,9 +173,9 @@ _TtGSaGSqC5sugar7MyClass__ ---> [sugar.MyClass?] _TtaC9typealias5DWARF9DIEOffset ---> typealias.DWARF.DIEOffset _Tta1t5Alias ---> t.Alias _Ttas3Int ---> Swift.Int -_TTRXFo_dSc_dSb_XFo_iSc_iSb_ ---> reabstraction thunk helper from @callee_owned (@unowned Swift.UnicodeScalar) -> (@unowned Swift.Bool) to @callee_owned (@in Swift.UnicodeScalar) -> (@out Swift.Bool) -_TTRXFo_dSi_dGSqSi__XFo_iSi_iGSqSi__ ---> reabstraction thunk helper from @callee_owned (@unowned Swift.Int) -> (@unowned Swift.Int?) to @callee_owned (@in Swift.Int) -> (@out Swift.Int?) -_TTRGrXFo_iV18switch_abstraction1A_ix_XFo_dS0__ix_ ---> reabstraction thunk helper from @callee_owned (@in switch_abstraction.A) -> (@out A) to @callee_owned (@unowned switch_abstraction.A) -> (@out A) +_TTRXFo_dSc_dSb_XFo_iSc_iSb_ ---> reabstraction thunk helper from @callee_owned (@in Swift.UnicodeScalar) -> (@out Swift.Bool) to @callee_owned (@unowned Swift.UnicodeScalar) -> (@unowned Swift.Bool) +_TTRXFo_dSi_dGSqSi__XFo_iSi_iGSqSi__ ---> reabstraction thunk helper from @callee_owned (@in Swift.Int) -> (@out Swift.Int?) to @callee_owned (@unowned Swift.Int) -> (@unowned Swift.Int?) +_TTRGrXFo_iV18switch_abstraction1A_ix_XFo_dS0__ix_ ---> reabstraction thunk helper from @callee_owned (@unowned switch_abstraction.A) -> (@out A) to @callee_owned (@in switch_abstraction.A) -> (@out A) _TFCF5types1gFT1bSb_T_L0_10Collection3zimfT_T_ ---> zim() -> () in Collection #2 in types.g(b: Swift.Bool) -> () _TFF17capture_promotion22test_capture_promotionFT_FT_SiU_FT_Si_promote0 ---> closure #1 () -> Swift.Int in capture_promotion.test_capture_promotion() -> () -> Swift.Int with unmangled suffix "_promote0" _TFIVs8_Processi10_argumentsGSaSS_U_FT_GSaSS_ ---> _arguments : [Swift.String] in variable initialization expression of Swift._Process with unmangled suffix "U_FT_GSaSS_" @@ -200,8 +200,9 @@ _TTSgSiS_ ---> _TTSgSiS_ _TTSgSi__xyz ---> _TTSgSi__xyz _TTSr5Si___TF4test7genericurFxx ---> generic not re-abstracted specialization of test.generic(A) -> A _TTSrq5Si___TF4test7genericurFxx ---> generic not re-abstracted specialization of test.generic(A) -> A -_TPA__TTRXFo_oSSoSS_dSb_XFo_iSSiSS_dSb_ ---> {T:_TTRXFo_oSSoSS_dSb_XFo_iSSiSS_dSb_} partial apply forwarder for reabstraction thunk helper from @callee_owned (@owned Swift.String, @owned Swift.String) -> (@unowned Swift.Bool) to @callee_owned (@in Swift.String, @in Swift.String) -> (@unowned Swift.Bool) -_TPAo__TTRGrXFo_dGSPx__dGSPx_zoPs5Error__XFo_iGSPx__iGSPx_zoPS___ ---> {T:_TTRGrXFo_dGSPx__dGSPx_zoPs5Error__XFo_iGSPx__iGSPx_zoPS___} partial apply ObjC forwarder for reabstraction thunk helper from @callee_owned (@unowned Swift.UnsafePointer) -> (@unowned Swift.UnsafePointer, @error @owned Swift.Error) to @callee_owned (@in Swift.UnsafePointer) -> (@out Swift.UnsafePointer, @error @owned Swift.Error) +_TPA__TTRXFo_oSSoSS_dSb_XFo_iSSiSS_dSb_ ---> {T:_TTRXFo_oSSoSS_dSb_XFo_iSSiSS_dSb_} partial apply forwarder for reabstraction thunk helper from @callee_owned (@in Swift.String, @in Swift.String) -> (@unowned Swift.Bool) to @callee_owned (@owned Swift.String, @owned Swift.String) -> (@unowned Swift.Bool) +to @callee_owned (@in Swift.String, @in Swift.String) -> (@unowned Swift.Bool) +_TPAo__TTRGrXFo_dGSPx__dGSPx_zoPs5Error__XFo_iGSPx__iGSPx_zoPS___ ---> {T:_TTRGrXFo_dGSPx__dGSPx_zoPs5Error__XFo_iGSPx__iGSPx_zoPS___} partial apply ObjC forwarder for reabstraction thunk helper from @callee_owned (@in Swift.UnsafePointer) -> (@out Swift.UnsafePointer, @error @owned Swift.Error) to @callee_owned (@unowned Swift.UnsafePointer) -> (@unowned Swift.UnsafePointer, @error @owned Swift.Error) _T0S2SSbIxxxd_S2SSbIxiid_TRTA ---> {T:_T0S2SSbIxxxd_S2SSbIxiid_TR} partial apply forwarder for reabstraction thunk helper from @callee_owned (@owned Swift.String, @owned Swift.String) -> (@unowned Swift.Bool) to @callee_owned (@in Swift.String, @in Swift.String) -> (@unowned Swift.Bool) _T0SPyxGAAs5Error_pIxydzo_A2AsAB_pIxirzo_lTRTa ---> {T:_T0SPyxGAAs5Error_pIxydzo_A2AsAB_pIxirzo_lTR} partial apply ObjC forwarder for reabstraction thunk helper from @callee_owned (@unowned Swift.UnsafePointer) -> (@unowned Swift.UnsafePointer, @error @owned Swift.Error) to @callee_owned (@in Swift.UnsafePointer) -> (@out Swift.UnsafePointer, @error @owned Swift.Error) _TiC4Meow5MyCls9subscriptFT1iSi_Sf ---> Meow.MyCls.subscript(i: Swift.Int) -> Swift.Float @@ -223,8 +224,8 @@ _TTSf1cl35_TFF7specgen6callerFSiT_U_FTSiSi_T_Si___TF7specgen12take_closureFFTSiS _TTSfq1cl35_TFF7specgen6callerFSiT_U_FTSiSi_T_Si___TF7specgen12take_closureFFTSiSi_T_T_ ---> function signature specialization () in specgen.caller(Swift.Int) -> (), Argument Types : [Swift.Int]> of specgen.take_closure((Swift.Int, Swift.Int) -> ()) -> () _TTSf1cl35_TFF7specgen6callerFSiT_U_FTSiSi_T_Si___TTSg5Si___TF7specgen12take_closureFFTSiSi_T_T_ ---> function signature specialization () in specgen.caller(Swift.Int) -> (), Argument Types : [Swift.Int]> of generic specialization of specgen.take_closure((Swift.Int, Swift.Int) -> ()) -> () _TTSg5Si___TTSf1cl35_TFF7specgen6callerFSiT_U_FTSiSi_T_Si___TF7specgen12take_closureFFTSiSi_T_T_ ---> generic specialization of function signature specialization () in specgen.caller(Swift.Int) -> (), Argument Types : [Swift.Int]> of specgen.take_closure((Swift.Int, Swift.Int) -> ()) -> () -_TTSf1cpfr24_TF8capturep6helperFSiT__n___TTRXFo_dSi_dT__XFo_iSi_dT__ ---> function signature specialization ()]> of reabstraction thunk helper from @callee_owned (@unowned Swift.Int) -> (@unowned ()) to @callee_owned (@in Swift.Int) -> (@unowned ()) -_TTSf1cpfr24_TF8capturep6helperFSiT__n___TTRXFo_dSi_DT__XFo_iSi_DT__ ---> function signature specialization ()]> of reabstraction thunk helper from @callee_owned (@unowned Swift.Int) -> (@unowned_inner_pointer ()) to @callee_owned (@in Swift.Int) -> (@unowned_inner_pointer ()) +_TTSf1cpfr24_TF8capturep6helperFSiT__n___TTRXFo_dSi_dT__XFo_iSi_dT__ ---> function signature specialization ()]> of reabstraction thunk helper from @callee_owned (@in Swift.Int) -> (@unowned ()) to @callee_owned (@unowned Swift.Int) -> (@unowned ()) +_TTSf1cpfr24_TF8capturep6helperFSiT__n___TTRXFo_dSi_DT__XFo_iSi_DT__ ---> function signature specialization ()]> of reabstraction thunk helper from @callee_owned (@in Swift.Int) -> (@unowned_inner_pointer ()) to @callee_owned (@unowned Swift.Int) -> (@unowned_inner_pointer ()) _TTSf1cpi0_cpfl0_cpse0v4u123_cpg53globalinit_33_06E7F1D906492AE070936A9B58CBAE1C_token8_cpfr36_TFtest_capture_propagation2_closure___TF7specgen12take_closureFFTSiSi_T_T_ ---> function signature specialization of specgen.take_closure((Swift.Int, Swift.Int) -> ()) -> () _TTSf0gs___TFVs17_LegacyStringCore15_invariantCheckfT_T_ ---> function signature specialization of Swift._LegacyStringCore._invariantCheck() -> () _TTSf2g___TTSf2s_d___TFVs17_LegacyStringCoreCfVs13_StringBufferS_ ---> function signature specialization of function signature specialization of Swift._LegacyStringCore.init(Swift._StringBuffer) -> Swift._LegacyStringCore @@ -241,7 +242,7 @@ _TTWurGV23interface_type_mangling18GenericTypeContextx_S_18GenericWitnessTestS_F _TFC3red11BaseClassEHcfzT1aSi_S0_ ---> red.BaseClassEH.init(a: Swift.Int) throws -> red.BaseClassEH _TFe27mangling_generic_extensionsRxS_8RunciblerVS_3Foog1aSi ---> (extension in mangling_generic_extensions):mangling_generic_extensions.Foo.a.getter : Swift.Int _TFe27mangling_generic_extensionsRxS_8RunciblerVS_3Foog1bx ---> (extension in mangling_generic_extensions):mangling_generic_extensions.Foo.b.getter : A -_TTRXFo_iT__iT_zoPs5Error__XFo__dT_zoPS___ ---> reabstraction thunk helper from @callee_owned (@in ()) -> (@out (), @error @owned Swift.Error) to @callee_owned () -> (@unowned (), @error @owned Swift.Error) +_TTRXFo_iT__iT_zoPs5Error__XFo__dT_zoPS___ ---> reabstraction thunk helper from @callee_owned () -> (@unowned (), @error @owned Swift.Error) to @callee_owned (@in ()) -> (@out (), @error @owned Swift.Error) _TFE1a ---> _TFE1a _TF21$__lldb_module_for_E0au3$E0Ps5Error_ ---> $__lldb_module_for_E0.$E0.unsafeMutableAddressor : Swift.Error _TMps10Comparable ---> protocol descriptor for Swift.Comparable diff --git a/test/Demangle/Inputs/simplified-manglings.txt b/test/Demangle/Inputs/simplified-manglings.txt index 56c5d1e0a4b43..18320c9b08dc9 100644 --- a/test/Demangle/Inputs/simplified-manglings.txt +++ b/test/Demangle/Inputs/simplified-manglings.txt @@ -135,9 +135,9 @@ _TtGSqGSaC5sugar7MyClass__ ---> [MyClass]? _TtGSaGSqC5sugar7MyClass__ ---> [MyClass?] _TtaC9typealias5DWARF9DIEOffset ---> DWARF.DIEOffset _Ttas3Int ---> Int -_TTRXFo_dSc_dSb_XFo_iSc_iSb_ ---> thunk for @callee_owned (@unowned UnicodeScalar) -> (@unowned Bool) -_TTRXFo_dSi_dGSqSi__XFo_iSi_iGSqSi__ ---> thunk for @callee_owned (@unowned Int) -> (@unowned Int?) -_TTRGrXFo_iV18switch_abstraction1A_ix_XFo_dS0__ix_ ---> thunk for @callee_owned (@in A) -> (@out A) +_TTRXFo_dSc_dSb_XFo_iSc_iSb_ ---> thunk for @callee_owned (@in UnicodeScalar) -> (@out Bool) +_TTRXFo_dSi_dGSqSi__XFo_iSi_iGSqSi__ ---> thunk for @callee_owned (@in Int) -> (@out Int?) +_TTRGrXFo_iV18switch_abstraction1A_ix_XFo_dS0__ix_ ---> thunk for @callee_owned (@unowned A) -> (@out A) _TFCF5types1gFT1bSb_T_L0_10Collection3zimfT_T_ ---> zim() in Collection #2 in g(b:) _TFF17capture_promotion22test_capture_promotionFT_FT_SiU_FT_Si_promote0 ---> closure #1 in test_capture_promotion() _TFIVs8_Processi10_argumentsGSaSS_U_FT_GSaSS_ ---> _arguments in variable initialization expression of _Process @@ -159,7 +159,7 @@ _TTSgSiS_ ---> _TTSgSiS_ _TTSgSi__xyz ---> _TTSgSi__xyz _TTSg5Si___TTSg5Si___TFSqcfT_GSqx_ ---> specialized Optional.init() _TTSg5Vs5UInt8___TFV10specialize3XXXcfT1tx_GS0_x_ ---> specialized XXX.init(t:) -_TPA__TTRXFo_oSSoSS_dSb_XFo_iSSiSS_dSb_31 ---> partial apply for thunk for @callee_owned (@owned String, @owned String) -> (@unowned Bool) +_TPA__TTRXFo_oSSoSS_dSb_XFo_iSSiSS_dSb_31 ---> partial apply for thunk for @callee_owned (@in String, @in String) -> (@unowned Bool) _TiC4Meow5MyCls9subscriptFT1iSi_Sf ---> MyCls.subscript(i:) _TF8manglingX22egbpdajGbuEbxfgehfvwxnFT_T_ ---> ليهمابتكلموشعربي؟() _TF8manglingX24ihqwcrbEcvIaIdqgAFGpqjyeFT_T_ ---> 他们为什么不说中文() @@ -179,8 +179,8 @@ _TPA__TFFVs11GeneratorOfcuRd__s13GeneratorTyperFqd__GS_x_U_FT_GSqx_ ---> partial _TTSf1cl35_TFF7specgen6callerFSiT_U_FTSiSi_T_Si___TF7specgen12take_closureFFTSiSi_T_T_ ---> specialized take_closure(_:) _TTSf1cl35_TFF7specgen6callerFSiT_U_FTSiSi_T_Si___TTSg5Si___TF7specgen12take_closureFFTSiSi_T_T_ ---> specialized take_closure(_:) _TTSg5Si___TTSf1cl35_TFF7specgen6callerFSiT_U_FTSiSi_T_Si___TF7specgen12take_closureFFTSiSi_T_T_ ---> specialized take_closure(_:) -_TTSf1cpfr24_TF8capturep6helperFSiT__n___TTRXFo_dSi_dT__XFo_iSi_dT__ ---> specialized thunk for @callee_owned (@unowned Int) -> (@unowned ()) -_TTSf1cpfr24_TF8capturep6helperFSiT__n___TTRXFo_dSi_DT__XFo_iSi_DT__ ---> specialized thunk for @callee_owned (@unowned Int) -> (@unowned_inner_pointer ()) +_TTSf1cpfr24_TF8capturep6helperFSiT__n___TTRXFo_dSi_dT__XFo_iSi_dT__ ---> specialized thunk for @callee_owned (@in Int) -> (@unowned ()) +_TTSf1cpfr24_TF8capturep6helperFSiT__n___TTRXFo_dSi_DT__XFo_iSi_DT__ ---> specialized thunk for @callee_owned (@in Int) -> (@unowned_inner_pointer ()) _TTSf1cpi0_cpfl0_cpse0v4u123_cpg53globalinit_33_06E7F1D906492AE070936A9B58CBAE1C_token8_cpfr36_TFtest_capture_propagation2_closure___TF7specgen12take_closureFFTSiSi_T_T_ ---> specialized take_closure(_:) _TTSf0gs___TFVs17_LegacyStringCore15_invariantCheckfT_T_ ---> specialized _LegacyStringCore._invariantCheck() _TTSf2g___TTSf2s_d___TFVs17_LegacyStringCoreCfVs13_StringBufferS_ ---> specialized _LegacyStringCore.init(_:) @@ -197,10 +197,10 @@ _TTWurGV23interface_type_mangling18GenericTypeContextx_S_18GenericWitnessTestS_F _TFC3red11BaseClassEHcfzT1aSi_S0_ ---> BaseClassEH.init(a:) _TFe27mangling_generic_extensionsR_S_8RunciblerVS_3Foog1aSi ---> Foo.a.getter _TFe27mangling_generic_extensionsR_S_8RunciblerVS_3Foog1bx ---> Foo.b.getter -_TTRXFo_iT__iT_zoPs5Error__XFo__dT_zoPS___ ---> thunk for @callee_owned (@in ()) -> (@out (), @error @owned Error) +_TTRXFo_iT__iT_zoPs5Error__XFo__dT_zoPS___ ---> thunk for @callee_owned () -> (@unowned (), @error @owned Error) _TFE1a ---> _TFE1a _TFC4testP33_83378C430F65473055F1BD53F3ADCDB71C5doFoofT_T_ ---> C.doFoo() -_TTRXFo_oCSo13SKPhysicsBodydVSC7CGPointdVSC8CGVectordGSpV10ObjectiveC8ObjCBool___XFdCb_dS_dS0_dS1_dGSpS3____ ---> thunk for @callee_owned (@owned SKPhysicsBody, @unowned CGPoint, @unowned CGVector, @unowned UnsafeMutablePointer) -> () +_TTRXFo_oCSo13SKPhysicsBodydVSC7CGPointdVSC8CGVectordGSpV10ObjectiveC8ObjCBool___XFdCb_dS_dS0_dS1_dGSpS3____ ---> thunk for @callee_unowned @convention(block) (@unowned SKPhysicsBody, @unowned CGPoint, @unowned CGVector, @unowned UnsafeMutablePointer) -> () _T0So13SKPhysicsBodyCSC7CGPointVSC8CGVectorVSpy10ObjectiveC8ObjCBoolVGIxxyyy_AbdFSpyAIGIyByyyy_TR ---> thunk for @callee_owned (@owned SKPhysicsBody, @unowned CGPoint, @unowned CGVector, @unowned UnsafeMutablePointer) -> () _T04main1_yyF ---> _() _T03abc6testitySiFTm ---> testit(_:)