// RUN: %clang_cc1 "-triple" "x86_64-apple-darwin9.0.0" -fsyntax-only -verify %s

#if !__has_feature(attribute_availability_with_strict)
#error "Missing __has_feature"
#endif

void f0(int) __attribute__((availability(macosx,introduced=10.4,deprecated=10.6)));
void f1(int) __attribute__((availability(macosx,introduced=10.5)));
void f2(int) __attribute__((availability(macosx,introduced=10.4,deprecated=10.5))); // expected-note {{'f2' has been explicitly marked deprecated here}}
void f3(int) __attribute__((availability(macosx,introduced=10.6)));
void f4(int) __attribute__((availability(macosx,introduced=10.1,deprecated=10.3,obsoleted=10.5), availability(ios,introduced=2.0,deprecated=3.0))); // expected-note{{explicitly marked unavailable}}
void f5(int) __attribute__((availability(ios,introduced=3.2), availability(macosx,unavailable))); // expected-note{{'f5' has been explicitly marked unavailable here}}
void f6(int) __attribute__((availability(macosx,strict,introduced=10.6))); //expected-note{{'f6' has been explicitly marked unavailable here}}

void test() {
  f0(0);
  f1(0);
  f2(0); // expected-warning{{'f2' is deprecated: first deprecated in macOS 10.5}}
  f3(0);
  f4(0); // expected-error{{f4' is unavailable: obsoleted in macOS 10.5}}
  f5(0); // expected-error{{'f5' is unavailable: not available on macOS}}
  f6(0); // expected-error{{'f6' is unavailable: introduced in macOS 10.6}}
}

struct __attribute__((availability(macosx,strict,introduced=10.6)))
  not_yet_introduced_struct; // \
    expected-note{{'not_yet_introduced_struct' has been explicitly marked unavailable here}}

void uses_not_introduced_struct(struct not_yet_introduced_struct *); // \
    expected-error{{'not_yet_introduced_struct' is unavailable: introduced in macOS 10.6}}

__attribute__((availability(macosx,strict,introduced=10.6)))
void uses_not_introduced_struct_same_availability(struct not_yet_introduced_struct *);

// rdar://10535640

enum {
    foo __attribute__((availability(macosx,introduced=8.0,deprecated=9.0)))
};

enum {
    bar __attribute__((availability(macosx,introduced=8.0,deprecated=9.0))) = foo
};

enum __attribute__((availability(macosx,introduced=8.0,deprecated=9.0))) {
    bar1 = foo
};

// Make sure the note is on the declaration with the actual availability attributes.
struct __attribute__((availability(macosx,strict,introduced=10.9))) type_info // \
    expected-note{{'type_info' has been explicitly marked unavailable here}}
{
};
struct type_info;
int test2() {
  struct type_info *t; // expected-error{{'type_info' is unavailable: introduced in macOS 10.9}}
  return 0;
}
