From 7d38fcd81fa1bb68f7296b9cee6a9c4dcc383450 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Fri, 22 Aug 2014 19:52:49 +0000 Subject: [PATCH] Objective-C. Update my previous patch to not warn if +initialize is called on 'super' in its implementation. rdar://16628028 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216282 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaExprObjC.cpp | 5 +++-- test/SemaObjC/warn-explicit-call-initialize.m | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp index cbf41b5069..22c55a7726 100644 --- a/lib/Sema/SemaExprObjC.cpp +++ b/lib/Sema/SemaExprObjC.cpp @@ -2232,8 +2232,9 @@ ExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, 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(Method->getDeclContext()); if (ID == Class) { diff --git a/test/SemaObjC/warn-explicit-call-initialize.m b/test/SemaObjC/warn-explicit-call-initialize.m index 786894cb1d..1c7baef15e 100644 --- a/test/SemaObjC/warn-explicit-call-initialize.m +++ b/test/SemaObjC/warn-explicit-call-initialize.m @@ -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 -- 2.40.0