/* Test protocol warning.  */
/* Contributed by Devang Patel <dpatel@apple.com>.  */
/* { dg-do compile } */
/* { dg-additional-options "-Wno-objc-root-class" } */

typedef struct objc_object { struct objc_class *class_pointer; } *id;

@protocol Bar
@end

id <Bar> Foo_Bar () { }

typedef struct
{
        int i;
} MyStruct;

@interface Foo
{
  id _mainData;
  MyStruct *_anotherData;
}

-(id) mainDataSource;
-(id) anotherDataSource;
-(id) my_method: (int) i;
@end

@implementation Foo
-(id) anotherDataSource
{
        return (id)_anotherData;
}

-(id) mainDataSource
{
        return _mainData;
}

-(id) my_method: (int) i
{
  id one = [self anotherDataSource];

  i = i - 1;
  // Do not issue warning about my_method not found in protocol
  return [(one ? [self mainDataSource] : one) my_method:i];
}

@end

