Problem is that methods return wrong type for their family. I will change the diagnostics to say ‘casting’ instead of ‘returning’. John M. may want to add more content to reason for such castings.
- Fariborz On Jul 11, 2013, at 11:40 AM, Arthur O'Dwyer <[email protected]> wrote: > On Thu, Jul 11, 2013 at 9:48 AM, Fariborz Jahanian <[email protected]> > wrote: >> @interface Fail @end >> @protocol X @end >> @implementation Fail >> -- (id<X>) initWithX >> +- (id<X>) initWithX // expected-note {{compiler has implicitly changed >> method 'initWithX' return type}} >> { >> - return (id)self; // expected-warning {{casting 'Fail *' to incompatible >> type 'id<X>'}} >> + return (id)self; // expected-warning {{returning 'Fail *' from a function >> with incompatible result type 'id<X>'}} >> } >> @end > > FWIW, I don't understand these new diagnostics at all. I understand > that with ARC the return type of initWithX must be (Fail*), not > (id<X>); but if the compiler has indeed "implicitly changed [the] > return type" to (Fail*), then why is it complaining so loudly about > the correct "return" statement? [Under ARC, it's always valid to > return "self" from an init method.] Or, if the compiler did NOT change > initWithX's return type, then why is it saying it did? > >> +@implementation UIViewController >> ++ (UIViewController<PMFilterManager> *)newFilterViewControllerForType // >> expected-note {{compiler has implicitly changed method >> 'newFilterViewControllerForType' return type}} >> +{ >> + UIViewController<PMFilterManager> *filterVC; >> + return filterVC; // expected-warning {{incompatible pointer types >> returning 'UIViewController *' from a function with result type >> 'UIViewController<PMFilterManager> *'}} >> +} >> +@end > > These diagnostics just look wrong. UIViewController's > newFilterViewControllerForType method is expected by ARC to return > (UIViewController*), and in fact that's how it's prototyped (with the > addition of an extra protocol, which doesn't hurt anything). And in > fact its return statement returns an expression of type > (UIViewController<PMFilterManager>*), which is implicitly convertible > to (UIViewController*). So these diagnostics are just confusing and > useless; there's no error here to diagnose. > > Thoughts? > -Arthur
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
