You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
have TypeCheckType be specific about the generic type a noncopyable was used with.
This change causes explicit types written in the
source language that substitute a noncopyable type
for a type variable in a generic type to state
that's what's wrong. For example:
```
// NEW: noncopyable type 'MO' cannot be used with generic type 'Dictionary<Key, Value>' yet
// OLD: noncopyable type 'MO' cannot be used with generics yet
let _: [MO : T]
```
Copy file name to clipboardExpand all lines: test/Constraints/moveonly_constraints.swift
+11-11Lines changed: 11 additions & 11 deletions
Original file line number
Diff line number
Diff line change
@@ -109,7 +109,7 @@ func checkBasicBoxes() {
109
109
_ = rb.get()
110
110
_ = rb.val
111
111
112
-
letvb2:ValBox<MO>=.init(MO()) // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
112
+
letvb2:ValBox<MO>=.init(MO()) // expected-error {{noncopyable type 'MO' cannot be used with generic type 'ValBox<T>' yet}}
113
113
}
114
114
115
115
func checkExistential(){
@@ -127,13 +127,13 @@ func checkExistential() {
127
127
}
128
128
129
129
func checkMethodCalls(){
130
-
lettg:NotStoredGenerically<MO>=NotStoredGenerically() // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
130
+
lettg:NotStoredGenerically<MO>=NotStoredGenerically() // expected-error {{noncopyable type 'MO' cannot be used with generic type 'NotStoredGenerically<T>' yet}}
131
131
tg.take(MO())
132
132
tg.give()
133
133
134
-
let _:Maybe<MO>=.none // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
135
-
let _ = Maybe<MO>.just(MO()) // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
136
-
let _:Maybe<MO>=.just(MO()) // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
134
+
let _:Maybe<MO>=.none // expected-error {{noncopyable type 'MO' cannot be used with generic type 'Maybe<T>' yet}}
135
+
let _ = Maybe<MO>.just(MO()) // expected-error {{noncopyable type 'MO' cannot be used with generic type 'Maybe<T>' yet}}
136
+
let _:Maybe<MO>=.just(MO()) // expected-error {{noncopyable type 'MO' cannot be used with generic type 'Maybe<T>' yet}}
137
137
takeMaybe(.just(MO())) // expected-error 2{{noncopyable type 'MO' cannot be used with generics yet}}
138
138
139
139
takeMaybe(true?.none :.just(MO())) // expected-error 3{{noncopyable type 'MO' cannot be used with generics yet}}
Copy file name to clipboardExpand all lines: test/Sema/moveonly_illegal_types.swift
+19-19Lines changed: 19 additions & 19 deletions
Original file line number
Diff line number
Diff line change
@@ -47,33 +47,33 @@ struct CerebralValley<T> {
47
47
// --- now some tests ---
48
48
// ----------------------
49
49
50
-
func basic_vararg(_ va:MO...){} // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
50
+
func basic_vararg(_ va:MO...){} // expected-error {{noncopyable type 'MO' cannot be used within a variadic type yet}}
51
51
52
52
func illegalTypes<T>(_ t:T){
53
-
let _:Array<MO> // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
54
-
let _:Maybe<MO> // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
55
-
let _:Dictionary<MO,String> // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
56
-
let _:[MO] // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
57
-
let _:[String:MO] // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
58
-
let _:[MO:MO] // expected-error 2{{noncopyable type 'MO' cannot be used with generics yet}}
59
-
let _:[MO:T] // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
60
-
61
-
_ = t as!ValBox<MO> // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
62
-
63
-
let _:Optional<MO> // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
64
-
let _:MO? // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
65
-
let _:MO?? // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
66
-
let _:MO! // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
67
-
let _:MO?! // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
53
+
let _:Array<MO> // expected-error {{noncopyable type 'MO' cannot be used with generic type 'Array<Element>' yet}}
54
+
let _:Maybe<MO> // expected-error {{noncopyable type 'MO' cannot be used with generic type 'Maybe<T>' yet}}
55
+
let _:Dictionary<MO,String> // expected-error {{noncopyable type 'MO' cannot be used with generic type 'Dictionary<Key, Value>' yet}}
56
+
let _:[MO] // expected-error {{noncopyable type 'MO' cannot be used with generic type 'Array<Element>' yet}}
57
+
let _:[String:MO] // expected-error {{noncopyable type 'MO' cannot be used with generic type 'Dictionary<Key, Value>' yet}}
58
+
let _:[MO:MO] // expected-error 2{{noncopyable type 'MO' cannot be used with generic type 'Dictionary<Key, Value>' yet}}
59
+
let _:[MO:T] // expected-error {{noncopyable type 'MO' cannot be used with generic type 'Dictionary<Key, Value>' yet}}
60
+
61
+
_ = t as!ValBox<MO> // expected-error {{noncopyable type 'MO' cannot be used with generic type 'ValBox<T>' yet}}
62
+
63
+
let _:Optional<MO> // expected-error {{noncopyable type 'MO' cannot be used with generic type 'Optional<Wrapped>' yet}}
64
+
let _:MO? // expected-error {{noncopyable type 'MO' cannot be used with generic type 'Optional<Wrapped>' yet}}
65
+
let _:MO?? // expected-error {{noncopyable type 'MO' cannot be used with generic type 'Optional<Wrapped>' yet}}
66
+
let _:MO! // expected-error {{noncopyable type 'MO' cannot be used with generic type 'Optional<Wrapped>' yet}}
67
+
let _:MO?! // expected-error {{noncopyable type 'MO' cannot be used with generic type 'Optional<Wrapped>' yet}}
68
68
69
69
let _:Klass&MO // expected-error {{non-protocol, non-class type 'MO' cannot be used within a protocol-constrained type}}
70
70
let _:anyMO // expected-error {{'any' has no effect on concrete type 'MO'}}
71
71
let _:anyGenericMO<T> // expected-error {{'any' has no effect on concrete type 'GenericMO<T>'}}
72
72
73
-
let _:CerebralValley<MO>.TechBro // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
74
-
let _:CerebralValley<Int>.GenericBro<MO> // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
73
+
let _:CerebralValley<MO>.TechBro // expected-error {{noncopyable type 'MO' cannot be used with generic type 'CerebralValley<T>' yet}}
74
+
let _:CerebralValley<Int>.GenericBro<MO> // expected-error {{noncopyable type 'MO' cannot be used with generic type 'CerebralValley<T>.GenericBro<U>' yet}}
75
75
76
-
let _:GenericMO<MO> // expected-error {{noncopyable type 'MO' cannot be used with generics yet}}
76
+
let _:GenericMO<MO> // expected-error {{noncopyable type 'MO' cannot be used with generic type 'GenericMO<T>' yet}}
Copy file name to clipboardExpand all lines: test/Sema/moveonly_restrictions.swift
+14-14Lines changed: 14 additions & 14 deletions
Original file line number
Diff line number
Diff line change
@@ -17,15 +17,15 @@ class MoveOnlyStruct {
17
17
18
18
classC{
19
19
varcopyable:CopyableKlass?=nil
20
-
varmoveOnlyC:MoveOnlyKlass?=nil // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generics yet}}
21
-
varmoveOnlyS:MoveOnlyStruct?=nil // expected-error {{noncopyable type 'MoveOnlyStruct' cannot be used with generics yet}}
20
+
varmoveOnlyC:MoveOnlyKlass?=nil // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generic type 'Optional<Wrapped>' yet}}
21
+
varmoveOnlyS:MoveOnlyStruct?=nil // expected-error {{noncopyable type 'MoveOnlyStruct' cannot be used with generic type 'Optional<Wrapped>' yet}}
22
22
}
23
23
24
24
@_moveOnly
25
25
classCMoveOnly{
26
26
varcopyable:CopyableKlass?=nil
27
-
varmoveOnlyC:MoveOnlyKlass?=nil // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generics yet}}
28
-
varmoveOnlyS:MoveOnlyStruct?=nil // expected-error {{noncopyable type 'MoveOnlyStruct' cannot be used with generics yet}}
27
+
varmoveOnlyC:MoveOnlyKlass?=nil // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generic type 'Optional<Wrapped>' yet}}
28
+
varmoveOnlyS:MoveOnlyStruct?=nil // expected-error {{noncopyable type 'MoveOnlyStruct' cannot be used with generic type 'Optional<Wrapped>' yet}}
29
29
}
30
30
31
31
structOptionalGrandField<T>{ // expected-error {{generic struct 'OptionalGrandField' cannot contain a noncopyable type without also being noncopyable}}
varmoveOnly3:OptionalGrandField<MoveOnlyKlass> // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generics yet}}
38
-
varmoveOnly4:OptionalGrandField<MoveOnlyStruct> // expected-error {{noncopyable type 'MoveOnlyStruct' cannot be used with generics yet}}
37
+
varmoveOnly3:OptionalGrandField<MoveOnlyKlass> // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generic type 'OptionalGrandField<T>' yet}}
38
+
varmoveOnly4:OptionalGrandField<MoveOnlyStruct> // expected-error {{noncopyable type 'MoveOnlyStruct' cannot be used with generic type 'OptionalGrandField<T>' yet}}
39
39
}
40
40
41
41
structSCopyable{
@@ -44,10 +44,10 @@ struct SCopyable {
44
44
45
45
structS{ // expected-error {{struct 'S' cannot contain a noncopyable type without also being noncopyable}}
46
46
varcopyable:CopyableKlass
47
-
varmoveOnly2:MoveOnlyStruct? // expected-error {{noncopyable type 'MoveOnlyStruct' cannot be used with generics yet}}
47
+
varmoveOnly2:MoveOnlyStruct? // expected-error {{noncopyable type 'MoveOnlyStruct' cannot be used with generic type 'Optional<Wrapped>' yet}}
varmoveOnly3:OptionalGrandField<MoveOnlyKlass> // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generics yet}}
50
-
varmoveOnly3:OptionalGrandField<MoveOnlyStruct> // expected-error {{noncopyable type 'MoveOnlyStruct' cannot be used with generics yet}}
49
+
varmoveOnly3:OptionalGrandField<MoveOnlyKlass> // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generic type 'OptionalGrandField<T>' yet}}
50
+
varmoveOnly3:OptionalGrandField<MoveOnlyStruct> // expected-error {{noncopyable type 'MoveOnlyStruct' cannot be used with generic type 'OptionalGrandField<T>' yet}}
51
51
}
52
52
53
53
@_moveOnly
@@ -59,7 +59,7 @@ struct SMoveOnly {
59
59
enumE{ // expected-error {{enum 'E' cannot contain a noncopyable type without also being noncopyable}}
60
60
case lhs(CopyableKlass)
61
61
case rhs(MoveOnlyKlass) // expected-note {{contained noncopyable enum case 'E.rhs'}}
62
-
case rhs2(OptionalGrandField<MoveOnlyKlass>) // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generics yet}}
62
+
case rhs2(OptionalGrandField<MoveOnlyKlass>) // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generic type 'OptionalGrandField<T>' yet}}
63
63
}
64
64
65
65
@_moveOnly
@@ -81,13 +81,13 @@ extension MoveOnlyStruct {
81
81
func foo(){
82
82
classC2{
83
83
varcopyable:CopyableKlass?=nil
84
-
varmoveOnly:MoveOnlyKlass?=nil // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generics yet}}
84
+
varmoveOnly:MoveOnlyKlass?=nil // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generic type 'Optional<Wrapped>' yet}}
85
85
}
86
86
87
87
@_moveOnly
88
88
classC2MoveOnly{
89
89
varcopyable:CopyableKlass?=nil
90
-
varmoveOnly:MoveOnlyKlass?=nil // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generics yet}}
90
+
varmoveOnly:MoveOnlyKlass?=nil // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generic type 'Optional<Wrapped>' yet}}
91
91
}
92
92
93
93
structS2{ // expected-error {{struct 'S2' cannot contain a noncopyable type without also being noncopyable}}
@@ -114,13 +114,13 @@ func foo() {
114
114
{
115
115
classC3{
116
116
varcopyable:CopyableKlass?=nil
117
-
varmoveOnly:MoveOnlyKlass?=nil // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generics yet}}
117
+
varmoveOnly:MoveOnlyKlass?=nil // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generic type 'Optional<Wrapped>' yet}}
118
118
}
119
119
120
120
@_moveOnly
121
121
classC3MoveOnly{
122
122
varcopyable:CopyableKlass?=nil
123
-
varmoveOnly:MoveOnlyKlass?=nil // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generics yet}}
123
+
varmoveOnly:MoveOnlyKlass?=nil // expected-error {{noncopyable type 'MoveOnlyKlass' cannot be used with generic type 'Optional<Wrapped>' yet}}
124
124
}
125
125
126
126
structS3{ // expected-error {{struct 'S3' cannot contain a noncopyable type without also being noncopyable}}
0 commit comments