/* Test assignments and comparisons involving `one-off' protocols.  */
/* Author: Nicola Pero <nicola@brainstorm.co.uk>.  */
/* { dg-do compile } */
#include <objc/objc.h>

@protocol MyProtocol
- (void) method;
@end

@interface MyClass
@end

int main()
{
  id obj = nil;
  id <MyProtocol> obj_p = nil;
  MyClass<MyProtocol> *obj_cp = nil;

  obj_cp = obj; /* Ok */
  obj = obj_cp; /* Ok */

  /* APPLE LOCAL begin mainline */
  obj_cp = obj_p; /* Ok */
  obj_p = obj_cp; /* Ok */
  /* APPLE LOCAL end mainline */
  
  if (obj_cp == obj) ; /* Ok */
  if (obj == obj_cp) ; /* Ok */

  if (obj_cp == obj_p) ; /* Ok */
  if (obj_p == obj_cp) ; /* Ok */

  return 0;
}
