@@ -80,6 +80,9 @@ struct ConditionalContainment<T: ~Copyable> {
8080
8181func chk( _ T: RequireCopyable < ConditionalContainment < Int > > ) { }
8282
83+ // expected-note@+2 3{{add}}
84+ // expected-error@+1 {{parameter of noncopyable type 'some Escapable & ~Copyable' must specify ownership}}
85+ func dogDays( _ t: some Escapable & ~ Copyable) { }
8386
8487/// ----------------
8588
@@ -289,11 +292,14 @@ func conflict1<T>(_ t: T) where T: NeedsCopyable, T: ~Copyable {}
289292func conflict2< T: ~ Copyable> ( _ t: AlwaysCopyable < T > ) { }
290293// expected-error@-1 {{'T' required to be 'Copyable' but is marked with '~Copyable'}}
291294
292- func conflict3< T: NeedsCopyable & ~ Copyable> ( _ t: T ) { }
295+ func conflict3a< T: NeedsCopyable & ~ Copyable> ( _ t: T ) { }
296+ // expected-error@-1 {{composition cannot contain '~Copyable' when another member requires 'Copyable'}}
297+
298+ func conflict3b< T> ( _ t: T ) where T: NeedsCopyable , T: ~ Copyable { }
293299// expected-error@-1 {{'T' required to be 'Copyable' but is marked with '~Copyable'}}
294300
295- func conflict4 ( _ t: some NeedsCopyable & ~ Copyable) { }
296- // expected-error@-1 {{'some NeedsCopyable & ~Copyable' required to be 'Copyable' but is marked with '~ Copyable'}}
301+ func conflict4a ( _ t: some NeedsCopyable & ~ Copyable) { }
302+ // expected-error@-1 {{composition cannot contain ' ~Copyable' when another member requires ' Copyable'}}
297303
298304protocol Conflict5 : ~ Copyable {
299305 borrowing func whatever( ) -> AlwaysCopyable < Self > // expected-error {{type 'Self' does not conform to protocol 'Copyable'}}
@@ -322,7 +328,7 @@ func conflict9<U: ~Copyable>(_ u: Conflict9<U>) {}
322328// expected-error@-1 {{'U' required to be 'Copyable' but is marked with '~Copyable'}}
323329
324330func conflict10< T> ( _ t: T , _ u: some ~ Copyable & Copyable)
325- // expected-error@-1 {{'some ~Copyable & Copyable' required to be ' Copyable' but is marked with '~ Copyable'}}
331+ // expected-error@-1 {{composition cannot contain '~ Copyable' when another member requires ' Copyable'}}
326332 where T: Copyable ,
327333 T: ~ Copyable { }
328334// expected-error@-1 {{'T' required to be 'Copyable' but is marked with '~Copyable'}}
@@ -378,6 +384,10 @@ func checkClassBound2<T>(_ t: T) where T: ~Escapable, T: AnyObject, T: ~Copyable
378384func checkClassBound3< T> ( _ t: T ) where T: Soup & ~ Copyable & ~ Escapable { }
379385// expected-error@-1 {{composition involving class requirement 'Soup' cannot contain '~Copyable'}}
380386
387+ func checkClassBound4< T> ( _ t: T ) where T: Soup , T: ~ Copyable & ~ Escapable { }
388+ // expected-error@-1 {{'T' required to be 'Copyable' but is marked with '~Copyable'}}
389+ // expected-error@-2 {{'T' required to be 'Escapable' but is marked with '~Escapable'}}
390+
381391public func checkAnyObjInv1< Result: AnyObject > ( _ t: borrowing Result ) where Result: ~ Copyable { }
382392// expected-error@-1 {{'Result' required to be 'Copyable' but is marked with '~Copyable'}}
383393
@@ -390,8 +400,10 @@ public func checkAnyObject<Result>(_ t: Result) where Result: AnyObject {
390400
391401func checkExistentialAndClasses(
392402 _ a: any AnyObject & ~ Copyable, // expected-error {{composition involving 'AnyObject' cannot contain '~Copyable'}}
393- _ b: any Soup & Copyable & ~ Escapable & ~ Copyable, // expected-error {{composition involving class requirement 'Soup' cannot contain '~Copyable'}}
394- _ c: some ( ~ Escapable & Removed) & Soup // expected-error {{composition involving class requirement 'Soup' cannot contain '~Escapable'}}
403+ _ b: any Soup & Copyable & ~ Escapable & ~ Copyable,
404+ // expected-error@-1 {{composition involving class requirement 'Soup' cannot contain '~Copyable'}}
405+ // expected-error@-2 {{composition cannot contain '~Copyable' when another member requires 'Copyable'}}
406+ _ c: some ( ~ Escapable & Removed) & Soup // expected-error {{composition cannot contain '~Escapable' when another member requires 'Escapable'}}
395407 ) { }
396408
397409protocol HasNCBuddy: ~ Copyable {
@@ -435,3 +447,13 @@ protocol Q: Copyable {}
435447// expected-error@+1 {{parameter of noncopyable type 'Blahaj<T>' must specify ownership}}
436448func testBlahaj< T, U: Q > ( _ x: Blahaj < T > ,
437449 _ y: Blahaj < U > ) { }
450+
451+ extension Int : NeedsCopyable { }
452+
453+ func checkExistentials( ) {
454+ let _: any ~ Escapable & ( NeedsCopyable & ~ Copyable) // expected-error {{composition cannot contain '~Copyable' when another member requires 'Copyable'}}
455+ let _: any NeedsCopyable & ~ Copyable = 1 // expected-error {{composition cannot contain '~Copyable' when another member requires 'Copyable'}}
456+ let _: any NeedsCopyable & ~ Escapable = 1 // expected-error {{composition cannot contain '~Escapable' when another member requires 'Escapable'}}
457+ let _: any Copyable & ~ Copyable = 1 // expected-error {{composition cannot contain '~Copyable' when another member requires 'Copyable'}}
458+ let _: any Escapable & ~ Escapable = 1 // expected-error {{composition cannot contain '~Escapable' when another member requires 'Escapable'}}
459+ }
0 commit comments