/* Test for situations in which protocol conformance information
   may be lost, leading to superfluous warnings.  */
/* Author: Ziemowit Laski <zlaski@apple.com>.  */
/* { dg-do compile } */
// { dg-additional-options "-Wno-objc-root-class" }

/* One-line substitute for objc/objc.h */
typedef struct objc_object { struct objc_class *class_pointer; } *id;

@protocol NSObject
- (int)someValue;
@end

@interface NSObject <NSObject>
@end

@protocol PlateMethods
- (void)someMethod;
@end

@interface Foo {
  NSObject <PlateMethods> *plate;
  id <PlateMethods> plate1;
  NSObject *plate2;
}
- (id <PlateMethods>) getPlate;
- (id <NSObject>) getPlate1;
- (int) getValue;
@end

@implementation Foo
- (id <PlateMethods>) getPlate {
  return plate;  /* { dg-bogus "does not implement" } */
}
- (id <NSObject>) getPlate1 {
  return (id <NSObject>)plate1; /* { dg-bogus "does not conform" } */
}
- (int) getValue {
  int i = [plate1 someValue];   /* { dg-warning ".\\-someValue. not found in protocol\\(s\\)" } */

  int j = [(id <NSObject>)plate1 someValue];  /* { dg-bogus "not found in protocol" } */
  int k = [(id)plate1 someValue]; /* { dg-bogus "not found in protocol" } */
  return i + j + k;
}
@end
