1// RUN: %clang_cc1 -triple x86_64-apple-macosx10.14.0 -fsyntax-only -Wno-objc-root-class -verify %s
2
3@interface I1 @end
4
5// expected-warning@+1 {{'always_inline' attribute only applies to functions}}
6__attribute__((always_inline))
7@implementation I1 @end
8
9// expected-warning@+1 {{'always_inline' attribute only applies to functions}}
10__attribute__((always_inline))
11@implementation I1 (MyCat) @end
12
13// expected-warning@+1 {{'always_inline' attribute only applies to functions}}
14__attribute__((always_inline))
15// expected-warning@+1 {{cannot find interface declaration for 'I2'}}
16@implementation I2 @end
17
18// expected-error@+1 {{only applies to Objective-C interfaces}}
19__attribute__((objc_root_class))
20// expected-warning@+1 {{cannot find interface declaration for 'I3'}}
21@implementation I3 @end
22
23#define AVAIL_ATTR __attribute__((availability(macos, introduced=1000)))
24
25typedef int AVAIL_ATTR unavail_int; // expected-note {{marked as being introduced}}
26
27@interface I4 @end // expected-note {{annotate}}
28@implementation I4 {
29  unavail_int x; // expected-warning {{'unavail_int' is only available on macOS 1000 or newer}}
30}
31@end
32
33@interface I5 @end
34
35#pragma clang attribute push (AVAIL_ATTR, apply_to=objc_implementation)
36@implementation I5 {
37  unavail_int x;
38}
39@end
40#pragma clang attribute pop
41
42I5 *i5;
43
44// expected-error@+1 2 {{'annotate' attribute takes at least 1 argument}}
45#pragma clang attribute push (__attribute__((annotate)), apply_to=objc_implementation)
46@interface I6 @end
47@interface I6 (MyCat) @end
48@interface I6 () @end
49
50@implementation I6 @end // expected-note {{when applied to this declaration}}
51@implementation I6 (MyCat) @end // expected-note {{when applied to this declaration}}
52
53#pragma clang attribute pop
54