| // RUN: %target-swift-frontend %s -typecheck -verify |
| |
| class Base<T> { } |
| class Derived: Base<Int> { } |
| |
| func foo<T>(_ x: T) -> Derived where T: Base<Int>, T: Derived { |
| // expected-warning@-1{{redundant superclass constraint 'T' : 'Base<Int>'}} |
| // expected-note@-2{{superclass constraint 'T' : 'Derived' written here}} |
| return x |
| } |
| |
| // FIXME: Should not be an error |
| // expected-error@+2{{generic parameter 'U' cannot be a subclass of both 'Derived' and 'Base<T>'}} |
| // expected-note@+1{{superclass constraint 'U' : 'Base<T>' written here}} |
| func bar<T, U>(_ x: U, y: T) -> (Derived, Int) where U: Base<T>, U: Derived { |
| // FIXME |
| // expected-error@+1{{cannot convert return expression}} |
| return (x, y) |
| } |
| |
| // SR-7551 captures a crash on this code. |
| class IntegerClass : ExpressibleByIntegerLiteral, Equatable { |
| required init(integerLiteral value: Int) { } |
| static func ==(lhs: IntegerClass, rhs: IntegerClass) -> Bool { return true } |
| } |
| |
| func foo<T: IntegerClass>(_ num: T) { let _ = num != 0 } |