blob: fa6f670cc997f420641898fe11ddde9db3934c33 [file] [log] [blame]
Alex Lorenz4e3c0bd2019-01-09 22:31:37 +00001// RUN: %clang_cc1 -x objective-c -verify -fobjc-arc %s
2
3@interface NSObject
4
5+ (instancetype)new;
6+ (instancetype)alloc;
7
8@end
9
10@interface Sub: NSObject
11
12- (instancetype)init __attribute__((unavailable)); // expected-note 4 {{'init' has been explicitly marked unavailable here}}
13
14- (void)notImplemented __attribute__((unavailable)); // expected-note {{'notImplemented' has been explicitly marked unavailable here}}
15
16@end
17
18@implementation Sub
19
20+ (Sub *)create {
21 return [[self alloc] init];
22}
23
24+ (Sub *)create2 {
25 return [self new];
26}
27
28+ (Sub *)create3 {
29 return [Sub new];
30}
31
32- (instancetype) init {
33 return self;
34}
35
36- (void)reportUseOfUnimplemented {
37 [self notImplemented]; // expected-error {{'notImplemented' is unavailable}}
38}
39
40@end
41
42@interface SubClassContext: Sub
43@end
44
45@implementation SubClassContext
46
47- (void)subClassContext {
48 (void)[[Sub alloc] init]; // expected-error {{'init' is unavailable}}
49 (void)[Sub new]; // expected-error {{'new' is unavailable}}
50}
51
52@end
53
54void unrelatedContext() {
55 (void)[[Sub alloc] init]; // expected-error {{'init' is unavailable}}
56 (void)[Sub new]; // expected-error {{'new' is unavailable}}
57}
58
59@interface X @end
60
61@interface X (Foo)
62-(void)meth __attribute__((unavailable));
63@end
64
65@implementation X (Foo)
66-(void)meth {}
67-(void)call_it { [self meth]; }
68@end