// RUN: %clang_cc1 -fsyntax-only -fobjc-default-synthesize-properties -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;
@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;
@end

@implementation ClassDerived
- (void) Meth:(ClassBase*)foo {
  super.foo = foo; // must work with no warning
  [super setFoo:foo]; // works with no warning
}
@end
