/* 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 */

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

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

  return 0;
}
