| // RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -typecheck -I %S/Inputs/custom-modules %s -import-underlying-module -verify |
| |
| // REQUIRES: objc_interop |
| |
| import CoreCooling |
| |
| func testSomeClass(_ sc: SomeClass, osc: SomeClass?) { |
| let ao1: Any = sc.methodA(osc) |
| _ = ao1 |
| if sc.methodA(osc) == nil { } // expected-warning {{comparing non-optional value of type 'Any' to nil always returns false}} |
| |
| let ao2: Any = sc.methodB(nil) |
| _ = ao2 |
| if sc.methodA(osc) == nil { }// expected-warning {{comparing non-optional value of type 'Any' to nil always returns false}} |
| |
| let ao3: Any? = sc.property.flatMap { .some($0) } |
| _ = ao3 |
| let ao3_ok: Any? = sc.property // okay |
| _ = ao3_ok |
| |
| let ao4: Any = sc.methodD() |
| _ = ao4 |
| if sc.methodD() == nil { } // expected-warning {{comparing non-optional value of type 'Any' to nil always returns false}} |
| |
| sc.methodE(sc) |
| sc.methodE(osc) // expected-error{{value of optional type 'SomeClass?' not unwrapped; did you mean to use '!' or '?'?}} {{17-17=!}} |
| |
| sc.methodF(sc, second: sc) |
| sc.methodF(osc, second: sc) // expected-error{{value of optional type 'SomeClass?' not unwrapped; did you mean to use '!' or '?'?}} {{17-17=!}} |
| sc.methodF(sc, second: osc) // expected-error{{value of optional type 'SomeClass?' not unwrapped; did you mean to use '!' or '?'?}} {{29-29=!}} |
| |
| sc.methodG(sc, second: sc) |
| sc.methodG(osc, second: sc) // expected-error{{value of optional type 'SomeClass?' not unwrapped; did you mean to use '!' or '?'?}} {{17-17=!}} |
| sc.methodG(sc, second: osc) |
| |
| let ci: CInt = 1 |
| let sc2 = SomeClass(int: ci) |
| let sc2a: SomeClass = sc2 |
| _ = sc2a |
| if sc2 == nil { } // expected-warning {{comparing non-optional value of type 'SomeClass' to nil always returns false}} |
| |
| let sc3 = SomeClass(double: 1.5) |
| if sc3 == nil { } // okay |
| let sc3a: SomeClass = sc3 // expected-error{{value of optional type 'SomeClass?' not unwrapped}} {{28-28=!}} |
| _ = sc3a |
| |
| let sc4 = sc.returnMe() |
| let sc4a: SomeClass = sc4 |
| _ = sc4a |
| if sc4 == nil { } // expected-warning {{comparing non-optional value of type 'SomeClass' to nil always returns false}} |
| } |
| |
| // Nullability with CF types. |
| func testCF(_ fridge: CCRefrigerator) { |
| CCRefrigeratorOpenDoSomething(fridge) // okay |
| CCRefrigeratorOpenDoSomething(nil) // expected-error{{nil is not compatible with expected argument type 'CCRefrigerator'}} |
| |
| CCRefrigeratorOpenMaybeDoSomething(fridge) // okay |
| CCRefrigeratorOpenMaybeDoSomething(nil) // okay |
| |
| CCRefrigeratorOpenMaybeDoSomething(5) // expected-error{{cannot convert value of type 'Int' to expected argument type 'CCRefrigerator?'}} |
| } |