// RUN: %target-typecheck-verify-swift var t = true var f = false func markUsed(_ t: T) {} markUsed(t != nil) // expected-warning {{comparing non-optional value of type 'Bool' to nil always returns true}} markUsed(f != nil) // expected-warning {{comparing non-optional value of type 'Bool' to nil always returns true}} class C : Equatable {} func == (lhs: C, rhs: C) -> Bool { return true } func test(_ c: C) { if c == nil {} // expected-warning {{comparing non-optional value of type 'C' to nil always returns false}} } class D {} var d = D() var dopt: D? = nil var diuopt: D! = nil _ = d! // expected-error {{cannot force unwrap value of non-optional type 'D'}} _ = dopt == nil _ = diuopt == nil _ = diuopt is ExpressibleByNilLiteral // expected-warning {{'is' test is always true}} // expected-warning@-1 {{conditional cast from 'D!' to 'ExpressibleByNilLiteral' always succeeds}}