// RUN: %clang_cc1 -triple x86_64-apple-ios14-macabi -fblocks -fsyntax-only -verify %s
// RUN: %clang_cc1 -xobjective-c++ -triple x86_64-apple-ios14-macabi -fblocks -fsyntax-only -verify %s

// RUN: %clang_cc1 -triple x86_64-apple-ios14.1-macabi -DNO_WARNING -fblocks -fsyntax-only -verify %s

#ifdef NO_WARNING
  // expected-no-diagnostics
#endif

#define AVAILABLE_PREV __attribute__((availability(macCatalyst, introduced = 13.1)))
#define AVAILABLE_CURRENT __attribute__((availability(macCatalyst, introduced = 14)))
#define AVAILABLE_NEXT __attribute__((availability(macCatalyst, introduced = 14.1)))

void previouslyAvailable() AVAILABLE_PREV;
void currentlyAvailable() AVAILABLE_CURRENT;
void willBeAvailabile() AVAILABLE_NEXT;
#ifndef NO_WARNING
// expected-note@-2 {{'willBeAvailabile' has been marked as being introduced in macCatalyst 14.1 here, but the deployment target is macCatalyst 14.0.0}}
#endif


typedef struct {

} Record AVAILABLE_NEXT;
#ifndef NO_WARNING
// expected-note@-2 {{'Record' has been marked as being introduced in macCatalyst 14.1 here, but the deployment target is macCatalyst 14.0.0}}
#endif

AVAILABLE_PREV
Record var;
#ifndef NO_WARNING
// expected-warning@-2 {{'Record' is only available on macCatalyst 14.1 or newer}}
// expected-note@-3 {{annotate 'var' with an availability attribute to silence this warnin}}
#endif

AVAILABLE_NEXT
Record var2;

void test() {
  previouslyAvailable();
  currentlyAvailable();
  willBeAvailabile();
#ifndef NO_WARNING
  // expected-warning@-2 {{'willBeAvailabile' is only available on macCatalyst 14.1 or newer}}
  // expected-note@-3 {{enclose 'willBeAvailabile' in an @available check to silence this warning}}
#endif
  if (@available(maccatalyst 14.1, *))
    willBeAvailabile(); // OK
  if (@available(ios 14.1, *))
    willBeAvailabile(); // Also OK
  if (@available(macCatalyst 14.1, *))
    willBeAvailabile(); // OK
}

void previouslyAvailableIOS() __attribute__((availability(ios, introduced = 10)));
void currentlyAvailableIOS() __attribute__((availability(ios, introduced = 14)));
void willBeAvailabileIOS() __attribute__((availability(ios, introduced = 14.1)));
#ifndef NO_WARNING
// expected-note@-2 {{'willBeAvailabileIOS' has been marked as being introduced in macCatalyst 14.1 here, but the deployment target is macCatalyst 14.0.0}}
#endif

void testIOSAvailabilityAlsoWorks() {
  previouslyAvailableIOS();
  currentlyAvailableIOS();
  willBeAvailabileIOS();
#ifndef NO_WARNING
  // expected-warning@-2 {{'willBeAvailabileIOS' is only available on macCatalyst 14.1 or newer}}
  // expected-note@-3 {{enclose 'willBeAvailabileIOS' in an @available check to silence this warning}}
#endif
  if (@available(macCatalyst 14.1, *))
    willBeAvailabileIOS(); // OK
  if (@available(ios 14.1, *))
    willBeAvailabile(); // Also OK
}

typedef struct {

} Record2 __attribute__((availability(ios, introduced = 14.1)));
#ifndef NO_WARNING
// expected-note@-2 {{'Record2' has been marked as being introduced in macCatalyst 14.1 here, but the deployment target is macCatalyst 14.0.0}}
#endif

__attribute__((availability(ios, introduced = 10)))
Record2 var11;
#ifndef NO_WARNING
// expected-warning@-2 {{'Record2' is only available on macCatalyst 14.1 or newer}}
// expected-note@-3 {{annotate 'var11' with an availability attribute to silence this warnin}}
#endif

__attribute__((availability(ios, introduced = 14.1)))
Record2 var12;
