/* Test warning for non existing selectors.  */
/* Contributed by Devang Patel <dpatel@apple.com>.  */

/* { dg-options "-Wselector -fnext-runtime" } */
/* { dg-do compile } */

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

@interface Foo
- (void) foo;
- (void) bar;
@end

@implementation Foo
- (void) bar
{
}

- (void) foo
{
  SEL a,b,c;
  a = @selector(b1ar); /* { dg-warning "creating selector for nonexistent method .b1ar." } */
  b = @selector(bar);
}
@end
