/* Test for -Wundeclared-selector.  */
/* Author: Nicola Pero <nicola@brainstorm.co.uk>.  */
/* { dg-do compile } */
/* { dg-options "-Wundeclared-selector" } */

#include <objc/objc.h>

@interface MyClass

+ (void) methodA;
- (void) methodB;
+ (void) methodD;
- (void) methodF;

@end

@implementation MyClass

+ (void) methodA {}
- (void) methodB {}
+ (void) methodD
{
  SEL d = @selector(methodD); /* Ok */
  SEL e = @selector(methodE);
}

- (void) methodE
{
  SEL e = @selector(methodE); /* Ok */
}

- (void) methodF
{
  SEL e = @selector(methodE); /* Ok */
}

@end

int main (void)
{
  SEL a = @selector(methodA); /* Ok */
  SEL b = @selector(methodB); /* Ok */
  SEL c = @selector(methodC); /* { dg-warning "undeclared selector" } */
  SEL d = @selector(methodD); /* Ok */
  SEL e = @selector(methodE); /* Ok */
  return 0;
  
}
