@@ -358,3 +358,35 @@ func conflict15<T, C, E>(_ t: T, _ c: C, _ e: borrowing E)
358358 C: ~ Escapable, // expected-error {{'C' required to be 'Escapable' but is marked with '~Escapable'}}
359359 C == T . HasE
360360 { }
361+
362+
363+ // Class bounds and AnyObject
364+
365+ class Soup { }
366+ func checkClassBound1< T> ( _ t: T ) where T: ~ Copyable, T: Soup { }
367+ // expected-error@-1 {{'T' required to be 'Copyable' but is marked with '~Copyable'}}
368+
369+ // expected-note@+2 3{{add}}
370+ // expected-error@+1 {{parameter of noncopyable type 'T' must specify ownership}}
371+ func checkClassBound2< T> ( _ t: T ) where T: ~ Escapable, T: AnyObject , T: ~ Copyable { }
372+ // expected-error@-1 {{'T' required to be 'Escapable' but is marked with '~Escapable'}}
373+ // expected-error@-2 {{'T' required to be 'Copyable' but is marked with '~Copyable'}}
374+
375+ func checkClassBound3< T> ( _ t: T ) where T: Soup & ~ Copyable & ~ Escapable { }
376+ // expected-error@-1 {{composition involving class requirement 'Soup' cannot contain '~Copyable'}}
377+
378+ public func checkAnyObjInv1< Result: AnyObject > ( _ t: borrowing Result ) where Result: ~ Copyable { }
379+ // expected-error@-1 {{'Result' required to be 'Copyable' but is marked with '~Copyable'}}
380+
381+ public func checkAnyObjInv2< Result: AnyObject > ( _ t: borrowing Result ) where Result: ~ Escapable { }
382+ // expected-error@-1 {{'Result' required to be 'Escapable' but is marked with '~Escapable'}}
383+
384+ public func checkAnyObject< Result> ( _ t: Result ) where Result: AnyObject {
385+ checkCopyable ( t)
386+ }
387+
388+ func checkExistentialAndClasses(
389+ _ a: any AnyObject & ~ Copyable, // expected-error {{composition involving 'AnyObject' cannot contain '~Copyable'}}
390+ _ b: any Soup & Copyable & ~ Escapable & ~ Copyable, // expected-error {{composition involving class requirement 'Soup' cannot contain '~Copyable'}}
391+ _ c: some ( ~ Escapable & Removed) & Soup // expected-error {{composition involving class requirement 'Soup' cannot contain '~Escapable'}}
392+ ) { }
0 commit comments