/* { dg-do compile } */ #include @protocol Foo - (id)meth1; - (id)meth2:(int)arg; @end @interface Derived1: Object @end @interface Derived2: Object + (Derived1 *)new; @end id func(void) { Object *o = [Object new]; return o; /* { dg-warning "class .Object. does not implement the .Foo. protocol" } */ } @implementation Derived2 + (Derived1 *)new { Derived2 *o = [super new]; return o; /* { dg-warning "distinct Objective\\-C type in return" } */ } @end