// RUN: %target-typecheck-verify-swift -swift-version 3 %s

@available(swift 3)
func swiftShortThree() {}

@available(swift 3.0)
func swiftShortThreePointOh() {}

@available(swift, introduced: 3.0)
func swiftThreePointOh() {}

@available(swift, introduced: 3.0, obsoleted: 4.0)
func swiftThreePointOhOnly() {}

@available(swift, deprecated: 3.0)
func swiftDeprecatedThreePointOh() {}

@available(swift, obsoleted: 3.0)
func swiftObsoletedThreePointOh() {} // expected-note {{was obsoleted in Swift 3.0}}

@available(swift, introduced: 3, obsoleted: 4.0)
class SwiftThreeOnly {}

@available(swift 4)
func swiftShortFour() {} // expected-note {{was introduced in Swift 4}}

@available(swift 4.0)
func swiftShortFourPointOh() {} // expected-note {{was introduced in Swift 4.0}}

@available(swift, introduced: 4)
func swiftFour() {} // expected-note {{was introduced in Swift 4}}

@available(swift, introduced: 4.0)
func swiftFourPointOh() {} // expected-note {{was introduced in Swift 4.0}}

@available(swift, introduced: 4.0, message: "uses abc")
func swiftFourPointOhWithMessage() {} // expected-note {{was introduced in Swift 4.0}}

@available(swift 4)
class SwiftShortFour {} // expected-note {{was introduced in Swift 4}}

@available(swift, introduced: 4, message: "uses pqr")
class SwiftFourWithMessage {} // expected-note {{was introduced in Swift 4}}


swiftShortThree()
swiftShortThreePointOh()
swiftThreePointOh()
swiftThreePointOhOnly()
swiftDeprecatedThreePointOh() // expected-warning {{is deprecated}}
swiftObsoletedThreePointOh() // expected-error {{is unavailable}}
let a : SwiftThreeOnly


swiftShortFour() // expected-error {{is unavailable}}
swiftShortFourPointOh() // expected-error {{is unavailable}}
swiftFour() // expected-error {{is unavailable}}
swiftFourPointOh() // expected-error {{is unavailable}}
swiftFourPointOhWithMessage() // expected-error {{is unavailable: uses abc}}
let aa : SwiftShortFour // expected-error {{is unavailable}}
let bb : SwiftFourWithMessage // expected-error {{is unavailable: uses pqr}}

@available(*, deprecated, message: "found the top-level decl")
func shadowedByMember3() {}
@available(*, deprecated, message: "found the top-level decl")
func shadowedByMember4() {}

struct Wrapper {
  @available(swift, introduced: 3.0, obsoleted: 4.0)
  @available(*, deprecated, message: "found the member decl")
  func shadowedByMember3() {}

  @available(swift, introduced: 4.0)
  @available(*, deprecated, message: "found the member decl")
  func shadowedByMember4() {}

  func test() {
    shadowedByMember3() // expected-warning {{found the member decl}}
    shadowedByMember4() // expected-warning {{found the top-level decl}}
  }
}
