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

void takevoidptr(void*);


@interface Foo
- iMethod;
+ cMethod;
@end

@interface A
+ superClassMethod;
- (void)instanceMethod;
@end

@interface B : A
- (void)instanceMethod;
+ classMethod;
@end

@implementation B

- (void)instanceMethod {
  [super iMethod]; // expected-warning{{'A' may not respond to 'iMethod'}}
  
  // Use of super in a block is ok and does codegen to the right thing.
  // rdar://7852959
  takevoidptr(^{
    [super instanceMethod];
  });
}

+ classMethod {
  [super cMethod]; // expected-warning{{method '+cMethod' not found (return type defaults to 'id')}}
  
  id X[] = { [ super superClassMethod] };
  id Y[] = {
    [ super.superClassMethod iMethod],
    super.superClassMethod,
    (id)super.superClassMethod  // not a cast of super: rdar://7853261
  };
  return 0;
}
@end

@interface XX
- m;
@end

void f(id super) {
  [super m];
}
void f0(int super) {
  [super m]; // expected-warning{{receiver type 'int' is not 'id'}}
}
void f1(id puper) {  // expected-note {{'puper' declared here}}
  [super m]; // expected-error{{use of undeclared identifier 'super'}}
}

// radar 7400691
typedef Foo super;

typedef Foo FooTD;

void test() {
  [FooTD cMethod];
  [super cMethod];
}

struct SomeStruct {
  int X;
};

int test2() {
  struct SomeStruct super = { 0 };
  return super.X;
}

int test3() {
  id super = 0;
  [(B*)super instanceMethod];
  int *s1 = (int*)super;
  
  id X[] = { [ super superClassMethod] };
  return 0;
}
