mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
175 lines
7.1 KiB
Swift
175 lines
7.1 KiB
Swift
// Test the -require-explicit-availability flag
|
|
// REQUIRES: OS=macosx
|
|
|
|
// RUN: %swiftc_driver -typecheck -parse-as-library -target %target-cpu-apple-macosx10.10 -Xfrontend -verify -require-explicit-availability -require-explicit-availability-target "macOS 10.10" %s
|
|
|
|
public struct S { // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}}
|
|
public func method() { }
|
|
}
|
|
|
|
public func foo() { bar() } // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
|
|
@usableFromInline
|
|
func bar() { } // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
|
|
@available(macOS 10.1, *)
|
|
public func ok() { }
|
|
|
|
@available(macOS, unavailable)
|
|
public func unavailableOk() { }
|
|
|
|
@available(macOS, deprecated: 10.10)
|
|
public func missingIntro() { } // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
|
|
@available(iOS 9.0, *)
|
|
public func missingTargetPlatform() { } // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
|
|
func privateFunc() { }
|
|
|
|
@_alwaysEmitIntoClient
|
|
public func alwaysEmitted() { }
|
|
|
|
@available(macOS 10.1, *)
|
|
struct SOk {
|
|
public func okMethod() { }
|
|
}
|
|
|
|
precedencegroup MediumPrecedence {}
|
|
infix operator + : MediumPrecedence
|
|
|
|
public func +(lhs: S, rhs: S) -> S { } // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
|
|
public enum E { } // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
|
|
public class C { } // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
|
|
public protocol P { } // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
|
|
private protocol PrivateProto { }
|
|
|
|
extension S { // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
public func warnForPublicMembers() { } // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{3-3=@available(macOS 10.10, *)\n }}
|
|
}
|
|
|
|
@available(macOS 10.1, *)
|
|
extension S {
|
|
public func okWhenTheExtensionHasAttribute() { }
|
|
}
|
|
|
|
extension S {
|
|
internal func dontWarnWithoutPublicMembers() { }
|
|
private func dontWarnWithoutPublicMembers1() { }
|
|
}
|
|
|
|
extension S : P { // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
}
|
|
|
|
extension S : PrivateProto {
|
|
}
|
|
|
|
open class OpenClass { } // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
|
|
private class PrivateClass { }
|
|
|
|
extension PrivateClass { }
|
|
|
|
@available(macOS 10.1, *)
|
|
public protocol PublicProtocol { }
|
|
|
|
@available(macOS 10.1, *)
|
|
extension S : PublicProtocol { }
|
|
|
|
@_spi(SPIsAreOK)
|
|
public func spiFunc() { }
|
|
|
|
@_spi(SPIsAreOK)
|
|
public struct spiStruct {
|
|
public func spiMethod() {}
|
|
}
|
|
|
|
extension spiStruct {
|
|
public func spiExtensionMethod() {}
|
|
}
|
|
|
|
public var publicVar = S() // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
|
|
@available(macOS 10.10, *)
|
|
public var publicVarOk = S()
|
|
|
|
public var (a, b) = (S(), S()) // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
|
|
@available(macOS 10.10, *)
|
|
public var (c, d) = (S(), S())
|
|
|
|
public var _ = S() // expected-error {{global variable declaration does not bind any variables}}
|
|
|
|
public var implicitGet: S { // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
return S()
|
|
}
|
|
|
|
@available(macOS 10.10, *)
|
|
public var implicitGetOk: S {
|
|
return S()
|
|
}
|
|
|
|
public var computed: S { // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
get { return S() }
|
|
set { }
|
|
}
|
|
|
|
public var computedHalf: S { // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
@available(macOS 10.10, *)
|
|
get { return S() }
|
|
set { }
|
|
}
|
|
|
|
// FIXME the following warning is not needed.
|
|
public var computedOk: S { // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
@available(macOS 10.10, *)
|
|
get { return S() }
|
|
|
|
@available(macOS 10.10, *)
|
|
set { }
|
|
}
|
|
|
|
@available(macOS 10.10, *)
|
|
public var computedOk1: S {
|
|
get { return S() }
|
|
set { }
|
|
}
|
|
|
|
public class SomeClass { // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
public init () {}
|
|
|
|
public subscript(index: String) -> Int {
|
|
get { return 42; }
|
|
set(newValue) { }
|
|
}
|
|
}
|
|
|
|
extension SomeClass { // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{1-1=@available(macOS 10.10, *)\n}}
|
|
public convenience init(s : S) {} // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{3-3=@available(macOS 10.10, *)\n }}
|
|
|
|
@available(macOS 10.10, *)
|
|
public convenience init(s : SomeClass) {}
|
|
|
|
public subscript(index: Int) -> Int { // expected-warning {{public declarations should have an availability attribute when building with -require-explicit-availability}} {{3-3=@available(macOS 10.10, *)\n }}
|
|
get { return 42; }
|
|
set(newValue) { }
|
|
}
|
|
|
|
@available(macOS 10.10, *)
|
|
public subscript(index: S) -> Int {
|
|
get { return 42; }
|
|
set(newValue) { }
|
|
}
|
|
}
|
|
|
|
@available(iOS 13.0, macOS 10.15, watchOS 6.0, tvOS 13.0, macCatalyst 13.0, *)
|
|
public struct StructWithImplicitMembers { }
|
|
|
|
extension StructWithImplicitMembers: Hashable { }
|
|
// expected-note @-1 {{add @available attribute to enclosing extension}}
|
|
// expected-warning @-2 {{public declarations should have an availability attribute when building with -require-explicit-availability}}
|
|
// expected-error @-3 {{'StructWithImplicitMembers' is only available in macOS 10.15 or newer}}
|