| // RUN: %swift -typecheck -verify -target x86_64-apple-macosx10.51 %clang-importer-sdk -I %S/Inputs/custom-modules %s %S/Inputs/availability_implicit_macosx_other.swift |
| // RUN: not %swift -typecheck -target x86_64-apple-macosx10.51 %clang-importer-sdk -I %S/Inputs/custom-modules %s %S/Inputs/availability_implicit_macosx_other.swift 2>&1 | %FileCheck %s '--implicit-check-not=<unknown>:0' |
| |
| // REQUIRES: OS=macosx |
| |
| |
| |
| // This is a temporary test for checking of availability diagnostics (explicit unavailability, |
| // deprecation, and potential unavailability) in synthesized code. After this checking |
| // is fully staged in, the tests in this file will be moved. |
| // |
| |
| import Foundation |
| |
| func useClassThatTriggersImportOfDeprecatedEnum() { |
| // Check to make sure that the bodies of enum methods that are synthesized |
| // when importing deprecated enums do not themselves trigger deprecation |
| // warnings in the synthesized code. |
| |
| _ = NSClassWithDeprecatedOptionsInMethodSignature.sharedInstance() |
| } |
| |
| func useClassThatTriggersImportOExplicitlyUnavailableOptions() { |
| _ = NSClassWithPotentiallyUnavailableOptionsInMethodSignature.sharedInstance() |
| } |
| |
| func useClassThatTriggersImportOfPotentiallyUnavailableOptions() { |
| _ = NSClassWithExplicitlyUnavailableOptionsInMethodSignature.sharedInstance() |
| } |
| |
| func directUseShouldStillTriggerDeprecationWarning() { |
| _ = NSDeprecatedOptions.first // expected-warning {{'NSDeprecatedOptions' was deprecated in OS X 10.51: Use a different API}} |
| _ = NSDeprecatedEnum.first // expected-warning {{'NSDeprecatedEnum' was deprecated in OS X 10.51: Use a different API}} |
| } |
| |
| func useInSignature(_ options: NSDeprecatedOptions) { // expected-warning {{'NSDeprecatedOptions' was deprecated in OS X 10.51: Use a different API}} |
| } |
| |
| class SuperClassWithDeprecatedInitializer { |
| @available(OSX, introduced: 10.9, deprecated: 10.51) |
| init() { } |
| } |
| |
| class SubClassWithSynthesizedDesignedInitializerOverride : SuperClassWithDeprecatedInitializer { |
| // The synthesized designated initializer override calls super.init(), which is |
| // deprecated, so the synthesized initializer is marked as deprecated as well. |
| // This does not generate a warning here (perhaps it should?) but any call |
| // to Sub's initializer will cause a deprecation warning. |
| } |
| |
| func callImplicitInitializerOnSubClassWithSynthesizedDesignedInitializerOverride() { |
| _ = SubClassWithSynthesizedDesignedInitializerOverride() // expected-warning {{'init()' was deprecated in OS X 10.51}} |
| } |
| |
| @available(OSX, introduced: 10.9, deprecated: 10.51) |
| class NSDeprecatedSuperClass { |
| var i : Int = 7 // Causes initializer to be synthesized |
| } |
| |
| class NotDeprecatedSubClassOfDeprecatedSuperClass : NSDeprecatedSuperClass { // expected-warning {{'NSDeprecatedSuperClass' was deprecated in OS X 10.51}} |
| } |
| |
| func callImplicitInitializerOnNotDeprecatedSubClassOfDeprecatedSuperClass() { |
| // We do not expect a warning here because the synthesized initializer |
| // in NotDeprecatedSubClassOfDeprecatedSuperClass is not itself marked |
| // deprecated. |
| _ = NotDeprecatedSubClassOfDeprecatedSuperClass() |
| } |
| |
| @available(OSX, introduced: 10.9, deprecated: 10.51) |
| class NSDeprecatedSubClassOfDeprecatedSuperClass : NSDeprecatedSuperClass { |
| } |
| |
| // Tests synthesis of materializeForSet |
| class ClassWithLimitedAvailabilityAccessors { |
| var limitedGetter: Int { |
| @available(OSX, introduced: 10.52) |
| get { return 10 } |
| set(newVal) {} |
| } |
| |
| var limitedSetter: Int { |
| get { return 10 } |
| @available(OSX, introduced: 10.52) |
| set(newVal) {} |
| } |
| } |
| |
| @available(*, unavailable) |
| func unavailableFunction() -> Int { return 10 } // expected-note 3{{'unavailableFunction()' has been explicitly marked unavailable here}} |
| |
| class ClassWithReferencesLazyInitializers { |
| var propWithUnavailableInInitializer: Int = unavailableFunction() // expected-error {{'unavailableFunction()' is unavailable}} |
| |
| lazy var lazyPropWithUnavailableInInitializer: Int = unavailableFunction() // expected-error {{'unavailableFunction()' is unavailable}} |
| } |
| |
| @available(*, unavailable) |
| func unavailableUseInUnavailableFunction() { |
| // Diagnose references to unavailable functions in non-implicit code |
| // as errors |
| unavailableFunction() // expected-error {{'unavailableFunction()' is unavailable}} expected-warning {{result of call to 'unavailableFunction()' is unused}} |
| } |
| |
| |
| @available(OSX 10.52, *) |
| func foo() { |
| let _ = SubOfOtherWithInit() |
| } |