// RUN: %clang_cc1 "-triple" "x86_64-apple-ios13.1-macabi" -fsyntax-only -verify %s
// RUN: %clang_cc1 "-triple" "x86_64-apple-ios13.1-macabi" -fapplication-extension -D APPEXT -fsyntax-only -verify %s

#ifdef APPEXT

#define maccatalyst maccatalyst_app_extension
#define macCatalyst maccatalyst_app_extension
#define ios ios_app_extension

#endif

void f0(int) __attribute__((availability(maccatalyst,introduced=2.0,deprecated=9.1))); // expected-note {{'f0' has been explicitly marked deprecated here}}
void f1(int) __attribute__((availability(maccatalyst,introduced=2.1)));
void f2(int) __attribute__((availability(macCatalyst,introduced=2.0,deprecated=9.0))); // expected-note {{'f2' has been explicitly marked deprecated here}}
void f3(int) __attribute__((availability(maccatalyst,introduced=3.0, obsoleted=9.0))); // expected-note {{'f3' has been explicitly marked unavailable here}}
void f32(int) __attribute__((availability(maccatalyst,introduced=3.0, obsoleted=9.0))); // expected-note {{'f32' has been explicitly marked unavailable here}}


void f5(int) __attribute__((availability(maccatalyst,introduced=2.0))) __attribute__((availability(maccatalyst,deprecated=9.0))); // expected-note {{'f5' has been explicitly marked deprecated here}}
void f6(int) __attribute__((availability(maccatalyst,deprecated=9.0))); // expected-note {{'f6' has been explicitly marked deprecated here}}
void f6(int) __attribute__((availability(macCatalyst,introduced=2.0)));

void f7(void) // expected-note {{'f7' has been explicitly marked deprecated here}}
__attribute__((availability(maccatalyst,introduced=3.0, deprecated=4.0)))
__attribute__((availability(ios,introduced=2.0, deprecated=5.0)));

void f8(void) // expected-note {{'f8' has been explicitly marked unavailable here}}
__attribute__((availability(maccatalyst,introduced=3.0, obsoleted=4.0)))
__attribute__((availability(ios,introduced=2.0, obsoleted=5.0)));

void f9(void) // expected-note {{'f9' has been explicitly marked unavailable here}}
__attribute__((availability(maccatalyst,unavailable)))
__attribute__((availability(ios,introduced=2.0)));

void test() {
  f0(0);
#ifndef APPEXT
  // expected-warning@-2 {{'f0' is deprecated: first deprecated in macCatalyst 9.1}}
#else
  // expected-warning@-4 {{'f0' is deprecated: first deprecated in macCatalyst (App Extension) 9.1}}
#endif
  f1(0);
  f2(0);
#ifndef APPEXT
  // expected-warning@-2 {{'f2' is deprecated: first deprecated in macCatalyst 9.0}}
#else
  // expected-warning@-4 {{'f2' is deprecated: first deprecated in macCatalyst (App Extension) 9.0}}
#endif
  f3(0);
#ifndef APPEXT
  // expected-error@-2 {{'f3' is unavailable: obsoleted in macCatalyst 9.0}}
#else
  // expected-error@-4 {{'f3' is unavailable: obsoleted in macCatalyst (App Extension) 9.0}}
#endif
  f32(0);
#ifndef APPEXT
  // expected-error@-2 {{'f32' is unavailable: obsoleted in macCatalyst 9.0}}
#else
  // expected-error@-4 {{'f32' is unavailable: obsoleted in macCatalyst (App Extension) 9.0}}
#endif
  f5(0); // expected-warning{{'f5' is deprecated: first deprecated in macCatalyst}}
  f6(0); // expected-warning{{'f6' is deprecated: first deprecated in macCatalyst}}

  f7();
#ifndef APPEXT
  // expected-warning@-2 {{'f7' is deprecated: first deprecated in macCatalyst 4.0}}
#else
  // expected-warning@-4 {{'f7' is deprecated: first deprecated in macCatalyst (App Extension) 4.0}}
#endif
  f8();
#ifndef APPEXT
  // expected-error@-2 {{'f8' is unavailable: obsoleted in macCatalyst 4.0}}
#else
  // expected-error@-4 {{'f8' is unavailable: obsoleted in macCatalyst (App Extension) 4.0}}
#endif
  f9(); // expected-error {{'f9' is unavailable}}
}

// Don't inherit "deprecated"/"obsoleted" from iOS for Mac Catalyst.

void f100(void)
__attribute__((availability(maccatalyst,introduced=3.0)))
__attribute__((availability(ios,introduced=2.0, deprecated=5.0)));

void f101(void)
__attribute__((availability(maccatalyst,introduced=3.0)))
__attribute__((availability(ios,introduced=2.0, obsoleted=5.0)));

void f102(void)
__attribute__((availability(maccatalyst,introduced=3.0)))
__attribute__((availability(ios,unavailable)));

void f103(void)
__attribute__((availability(ios,unavailable)));

void f103(void)
__attribute__((availability(maccatalyst,introduced=3.0)));

void dontInheritObsoletedDeprecated() {
  f100();
  f101();
  f102();
  f103();
}

// Inherit the ios availability when Mac Catalyst isn't given.

void f202(void) __attribute__((availability(ios,introduced=2.0, deprecated=5.0))); // expected-note {{here}}
void f203(void) __attribute__((availability(ios,introduced=2.0, obsoleted=5.0))); // expected-note {{here}}
void f204(void) __attribute__((availability(ios,unavailable))); // expected-note {{here}}

void inheritIosAvailability() {
  f202();
#ifndef APPEXT
// expected-warning@-2 {{'f202' is deprecated: first deprecated in macCatalyst 13.1}}
#else
// expected-warning@-4 {{'f202' is deprecated: first deprecated in macCatalyst (App Extension) 13.1}}
#endif
  f203();
#ifndef APPEXT
  // expected-error@-2 {{'f203' is unavailable: obsoleted in macCatalyst 13.1}}
#else
  // expected-error@-4 {{'f203' is unavailable: obsoleted in macCatalyst (App Extension) 13.1}}
#endif
  f204();
#ifndef APPEXT
  // expected-error@-2 {{'f204' is unavailable: not available on macCatalyst}}
#else
  // expected-error@-4 {{'f204' is unavailable: not available on macCatalyst (App Extension)}}
#endif
}
