Skip to content

Commit d63bf4e

Browse files
committed
Sema: Fix for bogus ParenType showing up in deduced associated types
When matching inputs of a function type, be sure to strip off ParenType sugar so that we don't end up with ParenTypes in associated type witnesses. This fixes various issues with SE-0110. Fixes <rdar://problem/32214649>.
1 parent 637096f commit d63bf4e

9 files changed

+65
-42
lines changed

lib/Sema/TypeCheckProtocol.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,11 @@ static SmallVector<TupleTypeElt, 4> decomposeIntoTupleElements(Type type) {
526526
return result;
527527
}
528528

529+
if (auto parenTy = dyn_cast<ParenType>(type.getPointer())) {
530+
result.push_back(parenTy->getUnderlyingType());
531+
return result;
532+
}
533+
529534
result.push_back(type);
530535
return result;
531536
}

test/Constraints/array_literal.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func longArray() {
102102
var _=["1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"]
103103
}
104104

105-
[1,2].map // expected-error {{expression type '(((Int)) throws -> _) throws -> [_]' is ambiguous without more context}}
105+
[1,2].map // expected-error {{expression type '((Int) throws -> _) throws -> [_]' is ambiguous without more context}}
106106

107107

108108
// <rdar://problem/25563498> Type checker crash assigning array literal to type conforming to _ArrayProtocol

test/Constraints/closures.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ func rdar21078316() {
349349

350350
// <rdar://problem/20978044> QoI: Poor diagnostic when using an incorrect tuple element in a closure
351351
var numbers = [1, 2, 3]
352-
zip(numbers, numbers).filter { $0.2 > 1 } // expected-error {{value of tuple type '((Int), (Int))' has no member '2'}}
352+
zip(numbers, numbers).filter { $0.2 > 1 } // expected-error {{value of tuple type '(Int, Int)' has no member '2'}}
353353

354354

355355

test/Constraints/tuple_arguments.swift

+18-3
Original file line numberDiff line numberDiff line change
@@ -1409,7 +1409,7 @@ func processArrayOfFunctions(f1: [((Bool, Bool)) -> ()],
14091409
}
14101410

14111411
f2.forEach { (block: ((Bool, Bool)) -> ()) in
1412-
// expected-error@-1 {{cannot convert value of type '(((Bool, Bool)) -> ()) -> ()' to expected argument type '(((Bool, Bool) -> ())) -> Void}}
1412+
// expected-error@-1 {{cannot convert value of type '(((Bool, Bool)) -> ()) -> ()' to expected argument type '((Bool, Bool) -> ()) -> Void}}
14131413
block(p)
14141414
block((c, c))
14151415
block(c, c)
@@ -1461,7 +1461,7 @@ let pages3: MutableProperty<(data: DataSourcePage<Int>, totalCount: Int)> = Muta
14611461
// SR-4745
14621462
let sr4745 = [1, 2]
14631463
let _ = sr4745.enumerated().map { (count, element) in "\(count): \(element)" }
1464-
// expected-error@-1 {{closure tuple parameter '(offset: Int, element: (Int))' does not support destructuring}} {{35-51=(arg) -> <#Result#>}} {{55-55=let (count, element) = arg; return }}
1464+
// expected-error@-1 {{closure tuple parameter '(offset: Int, element: Int)' does not support destructuring}} {{35-51=(arg) -> <#Result#>}} {{55-55=let (count, element) = arg; return }}
14651465

14661466
// SR-4738
14671467

@@ -1498,4 +1498,19 @@ let r31892961_5 = (x: 1, (y: 2, (w: 3, z: 4)))
14981498

14991499
let r31892961_6 = (x: 1, (y: 2, z: 4))
15001500
[r31892961_6].map { (x: Int, (y: Int, z: Int)) in x + y }
1501-
// expected-error@-1 {{closure tuple parameter does not support destructuring}} {{30-46=arg1}} {{51-51=let (y, z) = arg1; }}
1501+
// expected-error@-1 {{closure tuple parameter does not support destructuring}} {{30-46=arg1}} {{51-51=let (y, z) = arg1; }}
1502+
1503+
// rdar://problem/32214649 -- these regressed in Swift 4 mode
1504+
// with SE-0110 because of a problem in associated type inference
1505+
1506+
func r32214649_1<X,Y>(_ a: [X], _ f: (X)->Y) -> [Y] {
1507+
return a.map(f)
1508+
}
1509+
1510+
func r32214649_2<X>(_ a: [X], _ f: (X) -> Bool) -> [X] {
1511+
return a.filter(f)
1512+
}
1513+
1514+
func r32214649_3<X>(_ a: [X]) -> [X] {
1515+
return a.filter { _ in return true }
1516+
}

test/IDE/complete_from_stdlib.swift

+23-23
Original file line numberDiff line numberDiff line change
@@ -119,22 +119,22 @@ func protocolExtArray<T : Equatable>(_ a: [T]) {
119119
a.#^PRIVATE_NOMINAL_MEMBERS_4^#
120120
}
121121
// PRIVATE_NOMINAL_MEMBERS_4: Begin completions
122-
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: map({#(transform): ((Equatable)) throws -> T##((Equatable)) throws -> T#})[' rethrows'][#[T]#]{{; name=.+}}
123-
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceVar]/Super: last[#(Equatable)?#]{{; name=.+}}
124-
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: index({#of: (Equatable)#})[#Int?#]{{; name=.+}}
125-
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: index({#where: ((Equatable)) throws -> Bool##((Equatable)) throws -> Bool#})[' rethrows'][#Int?#]{{; name=.+}}
122+
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: map({#(transform): (Equatable) throws -> T##(Equatable) throws -> T#})[' rethrows'][#[T]#]{{; name=.+}}
123+
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceVar]/Super: last[#Equatable?#]{{; name=.+}}
124+
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: index({#of: Equatable#})[#Int?#]{{; name=.+}}
125+
// PRIVATE_NOMINAL_MEMBERS_4-DAG: Decl[InstanceMethod]/Super: index({#where: (Equatable) throws -> Bool##(Equatable) throws -> Bool#})[' rethrows'][#Int?#]{{; name=.+}}
126126
// PRIVATE_NOMINAL_MEMBERS_4: End completions
127127

128128
func testArchetypeReplacement1<FOO : Equatable>(_ a: [FOO]) {
129129
a.#^PRIVATE_NOMINAL_MEMBERS_5^#
130130
}
131131

132132
// PRIVATE_NOMINAL_MEMBERS_5: Begin completions
133-
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal: append({#(newElement): (Equatable)#})[#Void#]{{; name=.+}}
134-
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal: insert({#(newElement): (Equatable)#}, {#at: Int#})[#Void#]{{; name=.+}}
135-
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal: popLast()[#(Equatable)?#]{{; name=.+}}
133+
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal: append({#(newElement): Equatable#})[#Void#]{{; name=.+}}
134+
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal: insert({#(newElement): Equatable#}, {#at: Int#})[#Void#]{{; name=.+}}
135+
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/CurrNominal: popLast()[#Equatable?#]{{; name=.+}}
136136
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceVar]/Super: isEmpty[#Bool#]{{; name=.+}}
137-
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceVar]/Super: first[#(Equatable)?#]{{; name=.+}}
137+
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceVar]/Super: first[#Equatable?#]{{; name=.+}}
138138
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: dropFirst({#(n): Int#})[#ArraySlice<Equatable>#]{{; name=.+}}
139139
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: dropLast({#(n): Int#})[#ArraySlice<Equatable>#]{{; name=.+}}
140140
// PRIVATE_NOMINAL_MEMBERS_5-DAG: Decl[InstanceMethod]/Super: prefix({#(maxLength): Int#})[#ArraySlice<Equatable>#]{{; name=.+}}
@@ -146,33 +146,33 @@ func testArchetypeReplacement2<BAR : Equatable>(_ a: [BAR]) {
146146
}
147147

148148
// PRIVATE_NOMINAL_MEMBERS_6: Begin completions
149-
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal: append({#(newElement): (Equatable)#})[#Void#]{{; name=.+}}
150-
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal: insert({#(newElement): (Equatable)#}, {#at: Int#})[#Void#]{{; name=.+}}
151-
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal: popLast()[#(Equatable)?#]{{; name=.+}}
149+
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal: append({#(newElement): Equatable#})[#Void#]{{; name=.+}}
150+
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal: insert({#(newElement): Equatable#}, {#at: Int#})[#Void#]{{; name=.+}}
151+
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/CurrNominal: popLast()[#Equatable?#]{{; name=.+}}
152152
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: dropFirst()[#ArraySlice<Equatable>#]{{; name=.+}}
153153
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: dropLast()[#ArraySlice<Equatable>#]{{; name=.+}}
154154
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: enumerated()[#EnumeratedSequence<[Equatable]>#]{{; name=.+}}
155-
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: min({#by: ((Equatable), (Equatable)) throws -> Bool##((Equatable), (Equatable)) throws -> Bool#})[' rethrows'][#(Equatable)?#]{{; name=.+}}
156-
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: max({#by: ((Equatable), (Equatable)) throws -> Bool##((Equatable), (Equatable)) throws -> Bool#})[' rethrows'][#(Equatable)?#]{{; name=.+}}
155+
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: min({#by: (Equatable, Equatable) throws -> Bool##(Equatable, Equatable) throws -> Bool#})[' rethrows'][#Equatable?#]{{; name=.+}}
156+
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: max({#by: (Equatable, Equatable) throws -> Bool##(Equatable, Equatable) throws -> Bool#})[' rethrows'][#Equatable?#]{{; name=.+}}
157157
// FIXME: The following should include 'partialResult' as local parameter name: "(nextPartialResult): (_ partialResult: Result, Equatable)"
158-
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: reduce({#(initialResult): Result#}, {#(nextPartialResult): (Result, (Equatable)) throws -> Result##(Result, (Equatable)) throws -> Result#})[' rethrows'][#Result#]{{; name=.+}}
158+
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: reduce({#(initialResult): Result#}, {#(nextPartialResult): (Result, Equatable) throws -> Result##(Result, Equatable) throws -> Result#})[' rethrows'][#Result#]{{; name=.+}}
159159
// PRIVATE_NOMINAL_MEMBERS_6-DAG: Decl[InstanceMethod]/Super: dropFirst({#(n): Int#})[#ArraySlice<Equatable>#]{{; name=.+}}
160-
// FIXME: restore Decl[InstanceMethod]/Super: flatMap({#(transform): ((Equatable)) throws -> Sequence##(Equatable) throws -> Sequence#})[' rethrows'][#[IteratorProtocol.Element]#]{{; name=.+}}
160+
// FIXME: restore Decl[InstanceMethod]/Super: flatMap({#(transform): (Equatable) throws -> Sequence##(Equatable) throws -> Sequence#})[' rethrows'][#[IteratorProtocol.Element]#]{{; name=.+}}
161161

162162
func testArchetypeReplacement3 (_ a : [Int]) {
163163
a.#^PRIVATE_NOMINAL_MEMBERS_7^#
164164
}
165165

166166
// PRIVATE_NOMINAL_MEMBERS_7: Begin completions
167-
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/CurrNominal: append({#(newElement): (Int)#})[#Void#]
168-
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: removeLast()[#(Int)#]
169-
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/CurrNominal: popLast()[#(Int)?#]
170-
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceVar]/Super: first[#(Int)?#]
171-
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: map({#(transform): ((Int)) throws -> T##((Int)) throws -> T#})[' rethrows'][#[T]#]
167+
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/CurrNominal: append({#(newElement): Int#})[#Void#]
168+
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: removeLast()[#Int#]
169+
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/CurrNominal: popLast()[#Int?#]
170+
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceVar]/Super: first[#Int?#]
171+
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: map({#(transform): (Int) throws -> T##(Int) throws -> T#})[' rethrows'][#[T]#]
172172
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: dropLast({#(n): Int#})[#ArraySlice<Int>#]
173-
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: dropFirst({#(n): Int#})[#AnySequence<(Int)>#]
174-
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: prefix({#(maxLength): Int#})[#AnySequence<(Int)>#]
175-
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: elementsEqual({#(other): Sequence#}, {#by: ((Int), (Int)) throws -> Bool##((Int), (Int)) throws -> Bool#})[' rethrows'][#Bool#]
173+
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: dropFirst({#(n): Int#})[#AnySequence<Int>#]
174+
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: prefix({#(maxLength): Int#})[#AnySequence<Int>#]
175+
// PRIVATE_NOMINAL_MEMBERS_7-DAG: Decl[InstanceMethod]/Super: elementsEqual({#(other): Sequence#}, {#by: (Int, Int) throws -> Bool##(Int, Int) throws -> Bool#})[' rethrows'][#Bool#]
176176

177177

178178
protocol P2 {

test/IDE/print_type_interface.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ extension D {
7070

7171
// RUN: %target-swift-ide-test -print-type-interface -usr=_TtGSaSi_ -module-name print_type_interface -source-filename %s | %FileCheck %s -check-prefix=TYPE4
7272
// TYPE4-DAG: public typealias Index = Int
73-
// TYPE4-DAG: public func min() -> (Int)?
73+
// TYPE4-DAG: public func min() -> Int?
7474
// TYPE4-DAG: public mutating func insert<C>(contentsOf newElements: C, at i: Int)
7575
// TYPE4-DAG: public mutating func removeFirst(_ n: Int)
7676
// TYPE4-DAG: public func makeIterator() -> IndexingIterator<Array<Int>>
@@ -79,7 +79,7 @@ extension D {
7979
// RUN: %target-swift-ide-test -print-type-interface -usr=_TtGSaSS_ -module-name print_type_interface -source-filename %s | %FileCheck %s -check-prefix=TYPE5
8080
// TYPE5-DAG: public func prefix(_ maxLength: Int) -> ArraySlice<String>
8181
// TYPE5-DAG: public func suffix(_ maxLength: Int) -> ArraySlice<String>
82-
// TYPE5-DAG: public func split(separator: (String), maxSplits: Int = default, omittingEmptySubsequences: Bool = default) -> [ArraySlice<String>]
82+
// TYPE5-DAG: public func split(separator: String, maxSplits: Int = default, omittingEmptySubsequences: Bool = default) -> [ArraySlice<String>]
8383
// TYPE5-DAG: public func formIndex(_ i: inout Int, offsetBy n: Int)
8484
// TYPE5-DAG: public func distance(from start: Int, to end: Int) -> Int
8585
// TYPE5-DAG: public func joined(separator: String = default) -> String

test/Misc/misc_diagnostics.swift

+4-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,10 @@ func testIS1() -> Int { return 0 }
9090
let _: String = testIS1() // expected-error {{cannot convert value of type 'Int' to specified type 'String'}}
9191

9292
func insertA<T>(array : inout [T], elt : T) {
93-
array.append(T); // expected-error {{cannot invoke 'append' with an argument list of type '((T).Type)'}} expected-note {{expected an argument list of type '((T))'}}
93+
array.append(T.self); // expected-error {{cannot invoke 'append' with an argument list of type '(T.Type)'}} expected-note {{expected an argument list of type '(T)'}}
94+
95+
// FIXME: Kind of weird
96+
array.append(T); // expected-error {{cannot invoke 'append' with an argument list of type '((T).Type)'}} expected-note {{expected an argument list of type '(T)'}}
9497
}
9598

9699
// <rdar://problem/17875634> can't append to array of tuples

test/Prototypes/BigInt.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
1010
//
1111
//===----------------------------------------------------------------------===//
12-
// XFAIL: *
12+
// XFAIL: linux
1313
// RUN: rm -rf %t ; mkdir -p %t
1414
// RUN: %target-build-swift -swift-version 4 -o %t/a.out %s
1515
// RUN: %target-run %t/a.out

test/SourceKit/CursorInfo/cursor_stdlib.swift

+10-10
Original file line numberDiff line numberDiff line change
@@ -36,27 +36,27 @@ func foo3(a: Float, b: Bool) {}
3636

3737
// RUN: %sourcekitd-test -req=cursor -pos=8:10 %s -- %s %mcp_opt %clang-importer-sdk | %FileCheck -check-prefix=CHECK-REPLACEMENT1 %s
3838
// CHECK-REPLACEMENT1: <Group>Collection/Array</Group>
39-
// CHECK-REPLACEMENT1: <Declaration>{{.*}}func sorted() -&gt; [(<Type usr="s:Si">Int</Type>)]</Declaration>
39+
// CHECK-REPLACEMENT1: <Declaration>{{.*}}func sorted() -&gt; [<Type usr="s:Si">Int</Type>]</Declaration>
4040
// CHECK-REPLACEMENT1: RELATED BEGIN
41-
// CHECK-REPLACEMENT1: sorted(by: ((Int), (Int)) throws -&gt; Bool) rethrows -&gt; [(Int)]</RelatedName>
42-
// CHECK-REPLACEMENT1: sorted() -&gt; [(Int)]</RelatedName>
43-
// CHECK-REPLACEMENT1: sorted(by: ((Int), (Int)) throws -&gt; Bool) rethrows -&gt; [(Int)]</RelatedName>
41+
// CHECK-REPLACEMENT1: sorted(by: (Int, Int) throws -&gt; Bool) rethrows -&gt; [Int]</RelatedName>
42+
// CHECK-REPLACEMENT1: sorted() -&gt; [Int]</RelatedName>
43+
// CHECK-REPLACEMENT1: sorted(by: (Int, Int) throws -&gt; Bool) rethrows -&gt; [Int]</RelatedName>
4444
// CHECK-REPLACEMENT1: RELATED END
4545

4646
// RUN: %sourcekitd-test -req=cursor -pos=9:8 %s -- %s %mcp_opt %clang-importer-sdk | %FileCheck -check-prefix=CHECK-REPLACEMENT2 %s
4747
// CHECK-REPLACEMENT2: <Group>Collection/Array</Group>
48-
// CHECK-REPLACEMENT2: <Declaration>{{.*}}mutating func append(_ newElement: (<Type usr="s:Si">Int</Type>))</Declaration>
48+
// CHECK-REPLACEMENT2: <Declaration>{{.*}}mutating func append(_ newElement: <Type usr="s:Si">Int</Type>)</Declaration>
4949

5050
// RUN: %sourcekitd-test -req=cursor -pos=15:10 %s -- %s %mcp_opt %clang-importer-sdk | %FileCheck -check-prefix=CHECK-REPLACEMENT3 %s
5151
// CHECK-REPLACEMENT3: <Group>Collection/Array</Group>
52-
// CHECK-REPLACEMENT3: func sorted(by areInIncreasingOrder: ((<Type usr="s:13cursor_stdlib2S1V">S1</Type>)
53-
// CHECK-REPLACEMENT3: sorted() -&gt; [(S1)]</RelatedName>
54-
// CHECK-REPLACEMENT3: sorted() -&gt; [(S1)]</RelatedName>
55-
// CHECK-REPLACEMENT3: sorted(by: ((S1), (S1)) throws -&gt; Bool) rethrows -&gt; [(S1)]</RelatedName>
52+
// CHECK-REPLACEMENT3: func sorted(by areInIncreasingOrder: (<Type usr="s:13cursor_stdlib2S1V">S1</Type>
53+
// CHECK-REPLACEMENT3: sorted() -&gt; [S1]</RelatedName>
54+
// CHECK-REPLACEMENT3: sorted() -&gt; [S1]</RelatedName>
55+
// CHECK-REPLACEMENT3: sorted(by: (S1, S1) throws -&gt; Bool) rethrows -&gt; [S1]</RelatedName>
5656

5757
// RUN: %sourcekitd-test -req=cursor -pos=18:8 %s -- %s %mcp_opt %clang-importer-sdk | %FileCheck -check-prefix=CHECK-REPLACEMENT4 %s
5858
// CHECK-REPLACEMENT4: <Group>Collection/Array</Group>
59-
// CHECK-REPLACEMENT4: <Declaration>{{.*}}mutating func append(_ newElement: (<Type usr="s:13cursor_stdlib2S1V">S1</Type>))</Declaration>
59+
// CHECK-REPLACEMENT4: <Declaration>{{.*}}mutating func append(_ newElement: <Type usr="s:13cursor_stdlib2S1V">S1</Type>)</Declaration>
6060

6161
// RUN: %sourcekitd-test -req=cursor -pos=21:10 %s -- %s %mcp_opt %clang-importer-sdk | %FileCheck -check-prefix=CHECK-MODULE-GROUP1 %s
6262
// CHECK-MODULE-GROUP1: MODULE GROUPS BEGIN

0 commit comments

Comments
 (0)