From b3883df79c80e0a6aeeef1d78e757ad700dd6938 Mon Sep 17 00:00:00 2001 From: Suyash Srijan Date: Sat, 31 Aug 2019 22:06:38 +0100 Subject: [PATCH 1/5] [Demangler] When printing an associated type descriptor, print the full name of the associatedtype When we have information about the protocol that the type belongs to, print that as well. --- lib/Demangling/NodePrinter.cpp | 10 ++++++++-- test/Demangle/Inputs/manglings.txt | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/Demangling/NodePrinter.cpp b/lib/Demangling/NodePrinter.cpp index 190dfe7924042..de5742410cd4e 100644 --- a/lib/Demangling/NodePrinter.cpp +++ b/lib/Demangling/NodePrinter.cpp @@ -1704,10 +1704,16 @@ NodePointer NodePrinter::print(NodePointer Node, bool asPrefixContext) { Printer << ": "; print(Node->getChild(2)); return nullptr; - case Node::Kind::AssociatedTypeDescriptor: + case Node::Kind::AssociatedTypeDescriptor: { Printer << "associated type descriptor for "; - print(Node->getChild(0)); + auto assoc = Node->getChild(0); + if (auto parent = getFirstChildOfKind(assoc, Node::Kind::Type)) { + print(parent); + Printer << "."; + } + print(assoc); return nullptr; + } case Node::Kind::AssociatedTypeMetadataAccessor: Printer << "associated type metadata accessor for "; print(Node->getChild(1)); diff --git a/test/Demangle/Inputs/manglings.txt b/test/Demangle/Inputs/manglings.txt index d3964d6c5ff78..75ac3ec2b645a 100644 --- a/test/Demangle/Inputs/manglings.txt +++ b/test/Demangle/Inputs/manglings.txt @@ -341,7 +341,7 @@ $S7TestMod5OuterV3Fooayx_SiGD ---> TestMod.Outer.Foo $Ss17_VariantSetBufferO05CocoaC0ayx_GD ---> Swift._VariantSetBuffer.CocoaBuffer $S2t21QP22ProtocolTypeAliasThingayAA4BlahV5SomeQa_GSgD ---> t2.Blah.SomeQ as t2.Q.ProtocolTypeAliasThing? $s1A1gyyxlFx_qd__t_Ti5 ---> inlined generic function <(A, A1)> of A.g(A) -> () -$S1T19protocol_resilience17ResilientProtocolPTl ---> associated type descriptor for T +$S1T19protocol_resilience17ResilientProtocolPTl ---> associated type descriptor for protocol_resilience.ResilientProtocol.T $S18resilient_protocol21ResilientBaseProtocolTL ---> protocol requirements base descriptor for resilient_protocol.ResilientBaseProtocol $S1t1PP10AssocType2_AA1QTn ---> associated conformance descriptor for t.P.AssocType2: t.Q $S1t1PP10AssocType2_AA1QTN ---> default associated conformance accessor for t.P.AssocType2: t.Q From 8b7c5fe9cfdf9021ac89fc8689dc02d98929a6ec Mon Sep 17 00:00:00 2001 From: Suyash Srijan Date: Sun, 1 Sep 2019 03:28:46 +0100 Subject: [PATCH 2/5] [Demangler] Tweak printing of DependentAssociatedTypeRef --- lib/Demangling/NodePrinter.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/lib/Demangling/NodePrinter.cpp b/lib/Demangling/NodePrinter.cpp index de5742410cd4e..f7bdfbe4a5492 100644 --- a/lib/Demangling/NodePrinter.cpp +++ b/lib/Demangling/NodePrinter.cpp @@ -1704,16 +1704,10 @@ NodePointer NodePrinter::print(NodePointer Node, bool asPrefixContext) { Printer << ": "; print(Node->getChild(2)); return nullptr; - case Node::Kind::AssociatedTypeDescriptor: { + case Node::Kind::AssociatedTypeDescriptor: Printer << "associated type descriptor for "; - auto assoc = Node->getChild(0); - if (auto parent = getFirstChildOfKind(assoc, Node::Kind::Type)) { - print(parent); - Printer << "."; - } - print(assoc); + print(Node->getChild(0)); return nullptr; - } case Node::Kind::AssociatedTypeMetadataAccessor: Printer << "associated type metadata accessor for "; print(Node->getChild(1)); @@ -2148,7 +2142,9 @@ NodePointer NodePrinter::print(NodePointer Node, bool asPrefixContext) { return nullptr; } case Node::Kind::DependentAssociatedTypeRef: { - Printer << Node->getFirstChild()->getText(); + print(Node->getChild(1)); + Printer << '.'; + print(Node->getChild(0)); return nullptr; } case Node::Kind::ReflectionMetadataBuiltinDescriptor: From f25a5a2c30e6c4a5bc96e6395df6b5f04052e793 Mon Sep 17 00:00:00 2001 From: Suyash Srijan Date: Mon, 2 Sep 2019 23:35:31 +0100 Subject: [PATCH 3/5] [Demangler] Call getNumChildren() before accessing the node --- lib/Demangling/NodePrinter.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/Demangling/NodePrinter.cpp b/lib/Demangling/NodePrinter.cpp index f7bdfbe4a5492..93e2825998ffb 100644 --- a/lib/Demangling/NodePrinter.cpp +++ b/lib/Demangling/NodePrinter.cpp @@ -2142,8 +2142,10 @@ NodePointer NodePrinter::print(NodePointer Node, bool asPrefixContext) { return nullptr; } case Node::Kind::DependentAssociatedTypeRef: { - print(Node->getChild(1)); - Printer << '.'; + if (Node->getNumChildren() > 1) { + print(Node->getChild(1)); + Printer << '.'; + } print(Node->getChild(0)); return nullptr; } From c3f89e709832dc7ca9ad9c00b1eb5676fe2277ff Mon Sep 17 00:00:00 2001 From: Suyash Srijan Date: Tue, 3 Sep 2019 00:44:46 +0100 Subject: [PATCH 4/5] [Test] Fix tests --- test/Demangle/Inputs/manglings.txt | 6 +++--- test/Reflection/typeref_decoding.swift | 2 +- test/Reflection/typeref_decoding_asan.swift | 2 +- test/SILGen/interface_type_mangling.swift | 10 +++++----- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/test/Demangle/Inputs/manglings.txt b/test/Demangle/Inputs/manglings.txt index 75ac3ec2b645a..d40009dbd2cf7 100644 --- a/test/Demangle/Inputs/manglings.txt +++ b/test/Demangle/Inputs/manglings.txt @@ -65,7 +65,7 @@ _TtuRxlNrFxwx5Mince ---> (A) -> A.Mince _TtuRxlRrFxwx5Mince ---> (A) -> A.Mince _TtuRxlUrFxwx5Mince ---> (A) -> A.Mince _TtuRxs8RunciblerFxWx5Mince6Quince_ ---> (A) -> A.Mince.Quince -_TtuRxs8Runciblexs8FungiblerFxwxPS_5Mince ---> (A) -> A.Mince +_TtuRxs8Runciblexs8FungiblerFxwxPS_5Mince ---> (A) -> A.Swift.Runcible.Mince _TtuRxCs22AbstractRuncingFactoryrFxx ---> (A) -> A _TtuRxs8Runciblewx5MincezxrFxx ---> (A) -> A _TtuRxs8RuncibleWx5Mince6Quince_zxrFxx ---> (A) -> A @@ -252,8 +252,8 @@ _TFVV15nested_generics5Lunch6DinnerCfT11firstCoursex12secondCourseGSqqd___9lefto _TFVFC15nested_generics7HotDogs11applyRelishFT_T_L_6RelishCfT8materialx_GS1_x_ ---> init(material: A) -> Relish #1 in nested_generics.HotDogs.applyRelish() -> () in Relish #1 in nested_generics.HotDogs.applyRelish() -> () _TFVFE15nested_genericsSS3fooFT_T_L_6CheeseCfT8materialx_GS0_x_ ---> init(material: A) -> Cheese #1 in (extension in nested_generics):Swift.String.foo() -> () in Cheese #1 in (extension in nested_generics):Swift.String.foo() -> () _TTWOE5imojiCSo5Imoji14ImojiMatchRankS_9RankValueS_FS2_g9rankValueqq_Ss16RawRepresentable8RawValue ---> _TTWOE5imojiCSo5Imoji14ImojiMatchRankS_9RankValueS_FS2_g9rankValueqq_Ss16RawRepresentable8RawValue -_T0s17MutableCollectionP1asAARzs012RandomAccessB0RzsAA11SubSequences013BidirectionalB0PRpzsAdHRQlE06rotatecD05Indexs01_A9IndexablePQzAM15shiftingToStart_tFAJs01_J4BasePQzAQcfU_ ---> closure #1 (A.Index) -> A.Index in (extension in a):Swift.MutableCollection.rotateRandomAccess(shiftingToStart: A.Index) -> A.Index -_$Ss17MutableCollectionP1asAARzs012RandomAccessB0RzsAA11SubSequences013BidirectionalB0PRpzsAdHRQlE06rotatecD015shiftingToStart5Indexs01_A9IndexablePQzAN_tFAKs01_M4BasePQzAQcfU_ ---> closure #1 (A.Index) -> A.Index in (extension in a):Swift.MutableCollection.rotateRandomAccess(shiftingToStart: A.Index) -> A.Index +_T0s17MutableCollectionP1asAARzs012RandomAccessB0RzsAA11SubSequences013BidirectionalB0PRpzsAdHRQlE06rotatecD05Indexs01_A9IndexablePQzAM15shiftingToStart_tFAJs01_J4BasePQzAQcfU_ ---> closure #1 (A.Swift._IndexableBase.Index) -> A.Swift._IndexableBase.Index in (extension in a):Swift.MutableCollection.rotateRandomAccess(shiftingToStart: A.Swift._MutableIndexable.Index) -> A.Swift._MutableIndexable.Index +_$Ss17MutableCollectionP1asAARzs012RandomAccessB0RzsAA11SubSequences013BidirectionalB0PRpzsAdHRQlE06rotatecD015shiftingToStart5Indexs01_A9IndexablePQzAN_tFAKs01_M4BasePQzAQcfU_ ---> closure #1 (A.Swift._IndexableBase.Index) -> A.Swift._IndexableBase.Index in (extension in a):Swift.MutableCollection.rotateRandomAccess(shiftingToStart: A.Swift._MutableIndexable.Index) -> A.Swift._MutableIndexable.Index _T03foo4_123ABTf3psbpsb_n ---> function signature specialization of foo _T04main5innerys5Int32Vz_yADctF25closure_with_box_argumentxz_Bi32__lXXTf1nc_n ---> function signature specialization { var A } ]> of main.inner(inout Swift.Int32, (Swift.Int32) -> ()) -> () _$S4main5inneryys5Int32Vz_yADctF25closure_with_box_argumentxz_Bi32__lXXTf1nc_n ---> function signature specialization { var A } ]> of main.inner(inout Swift.Int32, (Swift.Int32) -> ()) -> () diff --git a/test/Reflection/typeref_decoding.swift b/test/Reflection/typeref_decoding.swift index f3bd95125056a..2345be9e13399 100644 --- a/test/Reflection/typeref_decoding.swift +++ b/test/Reflection/typeref_decoding.swift @@ -298,7 +298,7 @@ // CHECK: primaryArchetype: A // CHECK: (generic_type_parameter depth=0 index=0) -// CHECK: dependentMember1: A.Inner +// CHECK: dependentMember1: A.TypesToReflect.P1.Inner // CHECK: (dependent_member protocol=14TypesToReflect2P1P // CHECK: (generic_type_parameter depth=0 index=0) member=Inner) diff --git a/test/Reflection/typeref_decoding_asan.swift b/test/Reflection/typeref_decoding_asan.swift index b4e5c1ce14ba6..ed8c0de25db8a 100644 --- a/test/Reflection/typeref_decoding_asan.swift +++ b/test/Reflection/typeref_decoding_asan.swift @@ -291,7 +291,7 @@ // CHECK: primaryArchetype: A // CHECK: (generic_type_parameter depth=0 index=0) -// CHECK: dependentMember1: A.Inner +// CHECK: dependentMember1: A.TypesToReflect.P1.Inner // CHECK: (dependent_member protocol=14TypesToReflect2P1P // CHECK: (generic_type_parameter depth=0 index=0) member=Inner) diff --git a/test/SILGen/interface_type_mangling.swift b/test/SILGen/interface_type_mangling.swift index 722cf62158408..633f1182f1bb0 100644 --- a/test/SILGen/interface_type_mangling.swift +++ b/test/SILGen/interface_type_mangling.swift @@ -50,13 +50,13 @@ func h4(_ x: T) where T: P, T: Base, T: Q {} func h5(_ x: T) where T: P, T: Base, T: Q /* TODO: same type constraints , T.Assoc0 == Base*/ {} // CHECK-LABEL: interface_type_mangling.i1 -// CHECK: [[I_SIGNATURE:\(A\) -> \(\)]] +// CHECK: [[I_SIGNATURE:\(A\) -> \(\)]] func i1(_ x: T) where T: P, T: Q, T.Assoc1: P, T.Assoc0: Q {} // CHECK: interface_type_mangling.i2[[I_SIGNATURE]] func i2(_ x: T) where T: P, T: Q, T.Assoc0: Q, T.Assoc1: P {} // CHECK-LABEL: interface_type_mangling.j01 -// CHECK: [[J_SIGNATURE:\(A\) -> \(\)]] +// CHECK: [[J_SIGNATURE:\(A\) -> \(\)]] func j01(_ x: T) where T: P, T: Q, T.Assoc0 == T.Assoc1, T.Assoc1 == T.Assoc2 {} // CHECK: interface_type_mangling.j02[[J_SIGNATURE]] func j02(_ x: T) where T: P, T: Q, T.Assoc0 == T.Assoc2, T.Assoc1 == T.Assoc2 {} @@ -97,7 +97,7 @@ struct S {} struct G {} // CHECK-LABEL: interface_type_mangling.k01 -// CHECK: [[K_SIGNATURE:\(A\) -> \(\)]] +// CHECK: [[K_SIGNATURE:\(A\) -> \(\)]] func k01(_ x: T) where T: P, S == T.Assoc1, T.Assoc1 == T.Assoc2 {} // CHECK: interface_type_mangling.k02[[K_SIGNATURE]] func k02(_ x: T) where T: P, S == T.Assoc2, T.Assoc1 == T.Assoc2 {} @@ -135,7 +135,7 @@ func k17(_ x: T) where T: P, T.Assoc2 == T.Assoc1, T.Assoc2 == S {} func k18(_ x: T) where T: P, S == T.Assoc1, T.Assoc2 == S {} // CHECK-LABEL: interface_type_mangling.L01 -// CHECK: [[L_SIGNATURE:, A.Assoc2 == interface_type_mangling.G>\(A\) -> \(\)]] +// CHECK: [[L_SIGNATURE:, A.interface_type_mangling.P.Assoc2 == interface_type_mangling.G>\(A\) -> \(\)]] func L01(_ x: T) where T: P, G == T.Assoc1, T.Assoc1 == T.Assoc2 {} // CHECK: interface_type_mangling.L02[[L_SIGNATURE]] func L02(_ x: T) where T: P, G == T.Assoc2, T.Assoc1 == T.Assoc2 {} @@ -175,7 +175,7 @@ func L18(_ x: T) where T: P, G == T.Assoc1, T.Assoc2 == G {} struct X {}; struct Y {} // CHECK-LABEL: interface_type_mangling.m1 -// CHECK: [[M_SIGNATURE:\(_: A, y: B\) -> \(\)]] +// CHECK: [[M_SIGNATURE:\(_: A, y: B\) -> \(\)]] func m1(_ x: T, y: U) where T.Assoc == X, U.Assoc == Y {} // CHECK: interface_type_mangling.m2[[M_SIGNATURE]] func m2(_ x: T, y: U) where U.Assoc == Y, T.Assoc == X {} From ba9ec57d5f3b0b8bbb1bc290b441d589cd84961b Mon Sep 17 00:00:00 2001 From: Suyash Srijan Date: Tue, 3 Sep 2019 19:23:56 +0100 Subject: [PATCH 5/5] [Test] Fix remaining typeref decoding tests --- test/Reflection/typeref_decoding.swift | 16 ++++++++-------- test/Reflection/typeref_decoding_asan.swift | 16 ++++++++-------- test/SILGen/interface_type_mangling.swift | 6 +++--- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/test/Reflection/typeref_decoding.swift b/test/Reflection/typeref_decoding.swift index 2345be9e13399..c6a85a6063771 100644 --- a/test/Reflection/typeref_decoding.swift +++ b/test/Reflection/typeref_decoding.swift @@ -347,11 +347,11 @@ // CHECK: primaryArchetype: A // CHECK: (generic_type_parameter depth=0 index=0) -// CHECK: dependentMember1: A.Outer +// CHECK: dependentMember1: A.TypesToReflect.P2.Outer // CHECK: (dependent_member protocol=14TypesToReflect2P2P // CHECK: (generic_type_parameter depth=0 index=0) member=Outer) -// CHECK: dependentMember2: A.Outer.Inner +// CHECK: dependentMember2: A.TypesToReflect.P2.Outer.TypesToReflect.P1.Inner // CHECK: (dependent_member protocol=14TypesToReflect2P1P // CHECK: (dependent_member protocol=14TypesToReflect2P2P // CHECK: (generic_type_parameter depth=0 index=0) member=Outer) member=Inner) @@ -456,7 +456,7 @@ // CHECK: primaryArchetype: A // CHECK: (generic_type_parameter depth=0 index=0) -// CHECK: dependentMember1: A.Inner +// CHECK: dependentMember1: A.TypesToReflect.P1.Inner // CHECK: (dependent_member protocol=14TypesToReflect2P1P // CHECK: (generic_type_parameter depth=0 index=0) member=Inner) @@ -509,11 +509,11 @@ // CHECK: primaryArchetype: A // CHECK: (generic_type_parameter depth=0 index=0) -// CHECK: dependentMember1: A.Outer +// CHECK: dependentMember1: A.TypesToReflect.P2.Outer // CHECK: (dependent_member protocol=14TypesToReflect2P2P // CHECK: (generic_type_parameter depth=0 index=0) member=Outer) -// CHECK: dependentMember2: A.Outer.Inner +// CHECK: dependentMember2: A.TypesToReflect.P2.Outer.TypesToReflect.P1.Inner // CHECK: (dependent_member protocol=14TypesToReflect2P1P // CHECK: (dependent_member protocol=14TypesToReflect2P2P // CHECK: (generic_type_parameter depth=0 index=0) member=Outer) member=Inner) @@ -594,7 +594,7 @@ // CHECK: Primary: A // CHECK: (generic_type_parameter depth=0 index=0) -// CHECK: DependentMemberInner: A.Inner +// CHECK: DependentMemberInner: A.TypesToReflect.P1.Inner // CHECK: (dependent_member protocol=14TypesToReflect2P1P // CHECK: (generic_type_parameter depth=0 index=0) member=Inner) @@ -637,11 +637,11 @@ // CHECK: Primary: A // CHECK: (generic_type_parameter depth=0 index=0) -// CHECK: DependentMemberOuter: A.Outer +// CHECK: DependentMemberOuter: A.TypesToReflect.P2.Outer // CHECK: (dependent_member protocol=14TypesToReflect2P2P // CHECK: (generic_type_parameter depth=0 index=0) member=Outer) -// CHECK: DependentMemberInner: A.Outer.Inner +// CHECK: DependentMemberInner: A.TypesToReflect.P2.Outer.TypesToReflect.P1.Inner // CHECK: (dependent_member protocol=14TypesToReflect2P1P // CHECK: (dependent_member protocol=14TypesToReflect2P2P // CHECK: (generic_type_parameter depth=0 index=0) member=Outer) member=Inner) diff --git a/test/Reflection/typeref_decoding_asan.swift b/test/Reflection/typeref_decoding_asan.swift index ed8c0de25db8a..21985b1205c5d 100644 --- a/test/Reflection/typeref_decoding_asan.swift +++ b/test/Reflection/typeref_decoding_asan.swift @@ -340,11 +340,11 @@ // CHECK: primaryArchetype: A // CHECK: (generic_type_parameter depth=0 index=0) -// CHECK: dependentMember1: A.Outer +// CHECK: dependentMember1: A.TypesToReflect.P2.Outer // CHECK: (dependent_member protocol=14TypesToReflect2P2P // CHECK: (generic_type_parameter depth=0 index=0) member=Outer) -// CHECK: dependentMember2: A.Outer.Inner +// CHECK: dependentMember2: A.TypesToReflect.P2.Outer.TypesToReflect.P1.Inner // CHECK: (dependent_member protocol=14TypesToReflect2P1P // CHECK: (dependent_member protocol=14TypesToReflect2P2P // CHECK: (generic_type_parameter depth=0 index=0) member=Outer) member=Inner) @@ -449,7 +449,7 @@ // CHECK: primaryArchetype: A // CHECK: (generic_type_parameter depth=0 index=0) -// CHECK: dependentMember1: A.Inner +// CHECK: dependentMember1: A.TypesToReflect.P1.Inner // CHECK: (dependent_member protocol=14TypesToReflect2P1P // CHECK: (generic_type_parameter depth=0 index=0) member=Inner) @@ -502,11 +502,11 @@ // CHECK: primaryArchetype: A // CHECK: (generic_type_parameter depth=0 index=0) -// CHECK: dependentMember1: A.Outer +// CHECK: dependentMember1: A.TypesToReflect.P2.Outer // CHECK: (dependent_member protocol=14TypesToReflect2P2P // CHECK: (generic_type_parameter depth=0 index=0) member=Outer) -// CHECK: dependentMember2: A.Outer.Inner +// CHECK: dependentMember2: A.TypesToReflect.P2.Outer.TypesToReflect.P1.Inner // CHECK: (dependent_member protocol=14TypesToReflect2P1P // CHECK: (dependent_member protocol=14TypesToReflect2P2P // CHECK: (generic_type_parameter depth=0 index=0) member=Outer) member=Inner) @@ -587,7 +587,7 @@ // CHECK: Primary: A // CHECK: (generic_type_parameter depth=0 index=0) -// CHECK: DependentMemberInner: A.Inner +// CHECK: DependentMemberInner: A.TypesToReflect.P1.Inner // CHECK: (dependent_member protocol=14TypesToReflect2P1P // CHECK: (generic_type_parameter depth=0 index=0) member=Inner) @@ -630,11 +630,11 @@ // CHECK: Primary: A // CHECK: (generic_type_parameter depth=0 index=0) -// CHECK: DependentMemberOuter: A.Outer +// CHECK: DependentMemberOuter: A.TypesToReflect.P2.Outer // CHECK: (dependent_member protocol=14TypesToReflect2P2P // CHECK: (generic_type_parameter depth=0 index=0) member=Outer) -// CHECK: DependentMemberInner: A.Outer.Inner +// CHECK: DependentMemberInner: A.TypesToReflect.P2.Outer.TypesToReflect.P1.Inner // CHECK: (dependent_member protocol=14TypesToReflect2P1P // CHECK: (dependent_member protocol=14TypesToReflect2P2P // CHECK: (generic_type_parameter depth=0 index=0) member=Outer) member=Inner) diff --git a/test/SILGen/interface_type_mangling.swift b/test/SILGen/interface_type_mangling.swift index 633f1182f1bb0..1908c81c2ce87 100644 --- a/test/SILGen/interface_type_mangling.swift +++ b/test/SILGen/interface_type_mangling.swift @@ -97,7 +97,7 @@ struct S {} struct G {} // CHECK-LABEL: interface_type_mangling.k01 -// CHECK: [[K_SIGNATURE:\(A\) -> \(\)]] +// CHECK: [[K_SIGNATURE:\(A\) -> \(\)]] func k01(_ x: T) where T: P, S == T.Assoc1, T.Assoc1 == T.Assoc2 {} // CHECK: interface_type_mangling.k02[[K_SIGNATURE]] func k02(_ x: T) where T: P, S == T.Assoc2, T.Assoc1 == T.Assoc2 {} @@ -135,7 +135,7 @@ func k17(_ x: T) where T: P, T.Assoc2 == T.Assoc1, T.Assoc2 == S {} func k18(_ x: T) where T: P, S == T.Assoc1, T.Assoc2 == S {} // CHECK-LABEL: interface_type_mangling.L01 -// CHECK: [[L_SIGNATURE:, A.interface_type_mangling.P.Assoc2 == interface_type_mangling.G>\(A\) -> \(\)]] +// CHECK: [[L_SIGNATURE:, A.Assoc2 == interface_type_mangling.G>\(A\) -> \(\)]] func L01(_ x: T) where T: P, G == T.Assoc1, T.Assoc1 == T.Assoc2 {} // CHECK: interface_type_mangling.L02[[L_SIGNATURE]] func L02(_ x: T) where T: P, G == T.Assoc2, T.Assoc1 == T.Assoc2 {} @@ -175,7 +175,7 @@ func L18(_ x: T) where T: P, G == T.Assoc1, T.Assoc2 == G {} struct X {}; struct Y {} // CHECK-LABEL: interface_type_mangling.m1 -// CHECK: [[M_SIGNATURE:\(_: A, y: B\) -> \(\)]] +// CHECK: [[M_SIGNATURE:\(_: A, y: B\) -> \(\)]] func m1(_ x: T, y: U) where T.Assoc == X, U.Assoc == Y {} // CHECK: interface_type_mangling.m2[[M_SIGNATURE]] func m2(_ x: T, y: U) where U.Assoc == Y, T.Assoc == X {}