// RUN: clang-cc  -fsyntax-only -verify %s

@interface Root
-(void) method_r: (char)ch : (float*)f1 : (int*) x; // expected-note {{previous declaration is here}}
@end

@class Sub;

@interface Base : Root
-(void) method: (int*) x; // expected-note {{previous declaration is here}}
-(void) method1: (Base*) x; // expected-note {{previous declaration is here}}
-(void) method2: (Sub*) x;
+ method3: (int)x1 : (Base *)x2 : (float)x3; // expected-note {{previous declaration is here}}
+ mathod4: (id)x1;
- method5: (int) x : (double) d; // expected-note {{previous declaration is here}}
- method6: (int) x : (float) d; // expected-note {{previous declaration is here}}
@end

struct A {
  int x,y,z;
};

@interface Sub : Base
-(void) method: (struct A*) a;	// expected-warning {{method parameter type 'struct A *' does not match super class method parameter type 'int *'}}
-(void) method1: (Sub*) x;	// expected-warning {{method parameter type 'Sub *' does not match super class method parameter type 'Base *'}}
-(void) method2: (Base*) x;	// no need to warn. At call point we warn if need be.
+ method3: (int)x1 : (Sub *)x2 : (float)x3;	// expected-warning {{method parameter type 'Sub *' does not match super class method parameter type 'Base *'}}
+ mathod4: (Base*)x1;
-(void) method_r: (char)ch : (float*)f1 : (Sub*) x; // expected-warning {{method parameter type 'Sub *' does not match super class method parameter type 'int *'}}
- method5: (int) x : (float) d; // expected-warning {{method parameter type 'float' does not match super class method parameter type 'double'}}
- method6: (int) x : (double) d; // expected-warning {{method parameter type 'double' does not match super class method parameter type 'float'}}
@end

void f(Base *base, Sub *sub) {
  int x;
  [base method:&x];  // warn. if base is actually 'Sub' it will use -[Sub method] with wrong arguments
  
  Base *b;
  [base method1:b]; // if base is actuall 'Sub'  it will use [Sub method1] with wrong argument.

  [base method2:b];  // expected-warning {{}}

  Sub *s;
  [base method2:s]; // if base is actually 'Sub' OK. Either way OK.
  
}




