/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, December 2010.  */
/* { dg-do compile } */

/* This test tests class extensions and protocols.  */

#include <objc/objc.h>

/* First, a simple test where a plain class has a protocol attached to
   it in a class extension.  */
@interface MyObject
{
  Class isa;
}
@end

@protocol MyProtocol
- (void) test;
@end

@interface MyObject () <MyProtocol>
@end

@implementation MyObject
@end /* { dg-warning "incomplete implementation of class .MyObject." } */
     /* { dg-warning "method definition for .-test. not found" "" { target *-*-* } 24 } */
     /* { dg-warning "class .MyObject. does not fully implement the .MyProtocol. protocol" "" { target *-*-* } 24 } */



/* Second, a more interesting test where protocols are added from the
   main class and from two different class extensions.  */
@interface MyObject2 : MyObject <MyProtocol>
@end

@protocol MyProtocol2
- (void) test2;
@end

@protocol MyProtocol3
- (void) test3;
@end

@interface MyObject2 () <MyProtocol2>
@end

@interface MyObject2 () <MyProtocol3>
@end

@implementation MyObject2
@end /* { dg-warning "incomplete implementation of class .MyObject2." } */
     /* { dg-warning "method definition for .-test. not found" "" { target *-*-* } 50 } */
     /* { dg-warning "class .MyObject2. does not fully implement the .MyProtocol. protocol" "" { target *-*-* } 50 } */
     /* { dg-warning "method definition for .-test2. not found" "" { target *-*-* } 50 } */
     /* { dg-warning "class .MyObject2. does not fully implement the .MyProtocol2. protocol" "" { target *-*-* } 50 } */
     /* { dg-warning "method definition for .-test3. not found" "" { target *-*-* } 50 } */
     /* { dg-warning "class .MyObject2. does not fully implement the .MyProtocol3. protocol" "" { target *-*-* } 50 } */
