// RUN: %clang_cc1 -fsyntax-only -verify %s

@interface B
+(int) classGetter;
-(int) getter;
@end

@interface A : B
@end

@implementation A
+(int) classGetter {
  return 0;
}

+(int) classGetter2 {
  return super.classGetter;
}

-(void) method {
  int x = super.getter;
}
@end

void f0() {
  // FIXME: not implemented yet.
  //int l1 = A.classGetter;
  int l2 = [A classGetter2];
}

// rdar://13349296
__attribute__((objc_root_class)) @interface ClassBase 
@property (nonatomic, retain) ClassBase * foo; // expected-note {{property declared here}}
@end

@implementation ClassBase 
- (void) Meth:(ClassBase*)foo {
  super.foo = foo; // expected-error {{'ClassBase' cannot use 'super' because it is a root class}}
  [super setFoo:foo]; // expected-error {{'ClassBase' cannot use 'super' because it is a root class}}
}
@end

@interface ClassDerived : ClassBase 
@property (nonatomic, retain) ClassDerived * foo; // expected-warning {{auto property synthesis will not synthesize property 'foo'; it will be implemented by its superclass}}
@end

@implementation ClassDerived // expected-note {{detected while default synthesizing properties in class implementation}}
- (void) Meth:(ClassBase*)foo {
  super.foo = foo; // must work with no warning
  [super setFoo:foo]; // works with no warning
}
@end

@implementation IFaceNotFound (Foo) // expected-error {{cannot find interface declaration for 'IFaceNotFound'}}
-(int) foo {
  return super.foo; // expected-error {{expected identifier or '('}}
}
@end
