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

#define nil (void *)0;

extern void foo(void);

@protocol MyProtocol
- (void) method;
@end

@interface MyClass
@end

@interface MyClass (Addition) <MyProtocol>
- (void) method;
@end

@interface MyOtherClass : MyClass
@end

int main(void)
{
  id <MyProtocol> obj_id_p = nil;
  MyClass *obj_c_cat_p = nil;
  MyOtherClass *obj_c_super_p = nil;
  MyOtherClass<MyProtocol> *obj_c_super_p_q = nil;
  MyClass<MyProtocol> *obj_c_cat_p_q = nil;

  obj_c_cat_p = obj_id_p;
  obj_c_super_p = obj_id_p;
  obj_id_p = obj_c_cat_p;  /* Ok */
  obj_id_p = obj_c_super_p; /* Ok */

  if (obj_c_cat_p == obj_id_p) foo(); /* Ok */
  if (obj_c_super_p == obj_id_p) foo() ; /* Ok */
  if (obj_id_p == obj_c_cat_p)  foo(); /* Ok */
  if (obj_id_p == obj_c_super_p)  foo(); /* Ok */

  obj_c_cat_p = obj_c_super_p; // ok.
  obj_c_cat_p = obj_c_super_p_q; // ok.
  obj_c_super_p = obj_c_cat_p_q; // expected-warning {{incompatible pointer types}}
  obj_c_cat_p_q = obj_c_super_p;
  return 0;
}
