Are you sure excluding that case is right ? AFAIK, call [super initialize] is suspicious, as the runtime already call it for each class in the hierarchy.
Le 22 août 2014 à 21:52, Fariborz Jahanian <[email protected]> a écrit : > > Author: fjahanian > Date: Fri Aug 22 14:52:49 2014 > New Revision: 216282 > > URL: http://llvm.org/viewvc/llvm-project?rev=216282&view=rev > Log: > Objective-C. Update my previous patch to not warn if > +initialize is called on 'super' in its implementation. > rdar://16628028 > > Modified: > cfe/trunk/lib/Sema/SemaExprObjC.cpp > cfe/trunk/test/SemaObjC/warn-explicit-call-initialize.m > > Modified: cfe/trunk/lib/Sema/SemaExprObjC.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprObjC.cpp?rev=216282&r1=216281&r2=216282&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaExprObjC.cpp (original) > +++ cfe/trunk/lib/Sema/SemaExprObjC.cpp Fri Aug 22 14:52:49 2014 > @@ -2232,8 +2232,9 @@ ExprResult Sema::BuildClassMessage(TypeS > diag::err_illegal_message_expr_incomplete_type)) > return ExprError(); > > - // Warn about explicit call of +initialize on its own class. > - if (Method && Method->getMethodFamily() == OMF_initialize) { > + // Warn about explicit call of +initialize on its own class. But not on > 'super'. > + if (Method && Method->getMethodFamily() == OMF_initialize && > + !SuperLoc.isValid()) { > const ObjCInterfaceDecl *ID = > dyn_cast<ObjCInterfaceDecl>(Method->getDeclContext()); > if (ID == Class) { > > Modified: cfe/trunk/test/SemaObjC/warn-explicit-call-initialize.m > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/warn-explicit-call-initialize.m?rev=216282&r1=216281&r2=216282&view=diff > ============================================================================== > --- cfe/trunk/test/SemaObjC/warn-explicit-call-initialize.m (original) > +++ cfe/trunk/test/SemaObjC/warn-explicit-call-initialize.m Fri Aug 22 > 14:52:49 2014 > @@ -14,6 +14,8 @@ > [I initialize]; // expected-warning {{explicit call to +initialize > results in duplicate call to +initialize}} > [NSObject initialize]; // expected-warning {{explicit call to +initialize > results in duplicate call to +initialize}} > } > -+ (void)initialize {} > ++ (void)initialize { > + [super initialize]; > +} > @end > > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
