// RUN: %clang_cc1 -x objective-c -verify -fobjc-arc %s

@interface NSObject

+ (instancetype)new;
+ (instancetype)alloc;

- (void)declaredInSuper;

@end

@interface NSObject (Category)

- (void)declaredInSuperCategory;

@end

@interface Sub: NSObject

- (instancetype)init __attribute__((unavailable)); // expected-note 4 {{'init' has been explicitly marked unavailable here}}

- (void)notImplemented __attribute__((unavailable));

- (void)declaredInSuper __attribute__((unavailable));
- (void)declaredInSuperCategory __attribute__((unavailable));

@end

@implementation Sub

+ (Sub *)create {
  return [[self alloc] init];
}

+ (Sub *)create2 {
  return [self new];
}

+ (Sub *)create3 {
  return [Sub new];
}

- (instancetype) init {
  return self;
}

- (void)reportUseOfUnimplemented {
  [self notImplemented];
}

- (void)allowSuperCallUsingSelf {
  [self declaredInSuper];
  [[Sub alloc] declaredInSuper];
  [self declaredInSuperCategory];
  [[Sub alloc] declaredInSuperCategory];
}

@end

@interface SubClassContext: Sub
@end

@implementation SubClassContext

- (void)subClassContext {
  (void)[[Sub alloc] init]; // expected-error {{'init' is unavailable}}
  (void)[Sub new]; // expected-error {{'new' is unavailable}}
}

@end

void unrelatedContext() {
  (void)[[Sub alloc] init]; // expected-error {{'init' is unavailable}}
  (void)[Sub new]; // expected-error {{'new' is unavailable}}
}

@interface X @end

@interface X (Foo)
-(void)meth __attribute__((unavailable));
@end

@implementation X (Foo)
-(void)meth {}
-(void)call_it { [self meth]; }
@end
