/* Test simple ObjC types casts.  */
/* Author: Nicola Pero <nicola@brainstorm.co.uk>.  */
/* { dg-do compile } */

#include <objc/objc.h>

@protocol MyProtocol
- (void) foo;
@end

@interface MyClass
@end

int main()
{
  id obj = nil;
  id<MyProtocol> obj_p = nil;
  MyClass *obj_c = nil;
  Class obj_C = Nil;

  /* All these casts should generate no warnings.  */

  obj = (id)obj_p;
  obj = (id)obj_c;
  obj = (id)obj_C;
  obj_c = (MyClass *)obj;
  obj_c = (MyClass *)obj_p;
  obj_c = (MyClass *)obj_C;
  obj_p = (id<MyProtocol>)obj;
  obj_p = (id<MyProtocol>)obj_c;
  obj_p = (id<MyProtocol>)obj_C;
  obj_C = (Class)obj;
  obj_C = (Class)obj_p;
  obj_C = (Class)obj_c;
  

  return 0;
}
