/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, November 2010.  */
/* { dg-do compile } */
/* { dg-options "-Wno-protocol" } */
/* { dg-additional-options "-Wno-objc-root-class" } */

#include <objc/objc.h>

/* Test the -Wno-protocol flag.  With this, at a class is accepted
   (with no warnings) as conforming to a protocol even if some
   protocol methods are implemented in the superclass.  */

@protocol MyProtocol
- (int)method;
@end

@protocol MyProtocol2
- (int)method2;
@end

/* The superclass implements the method required by the protocol.  */
@interface MyRootClass
{
  Class isa;
}
- (int)method;
@end

@implementation MyRootClass
- (int)method
{
  return 23;
}
@end

/* The subclass inherits the method (does not implement it directly)
   but that still makes it conform to the protocol.  No warnings.  */
@interface MySubClass : MyRootClass <MyProtocol>
@end

@implementation MySubClass
@end /* No warnings here.  */


/* The subclass instead does not inherit the method method2 (and does
   not implement it directly) so it does not conform to the
   protocol MyProtocol2.  */
@interface MySubClass2 : MyRootClass <MyProtocol2>
@end

@implementation MySubClass2
@end /* Warnings here, below.  */
/* { dg-warning "incomplete implementation of class .MySubClass2." "" { target *-*-* } .-1 } */
/* { dg-warning "method definition for .\\-method2. not found" "" { target *-*-* } .-2 } */
/* { dg-warning "class .MySubClass2. does not fully implement the .MyProtocol2. protocol" "" { target *-*-* } .-3 } */
