From 78e9debf68d4a2b7ae27fddf7665c8bd9638b6dc Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Fri, 22 Aug 2014 16:57:26 +0000 Subject: Objective-C. Warn if user has made explicit call to +initilize as this results in an extra call to this method. rdar://16628028 llvm-svn: 216271 --- clang/lib/Sema/SemaExprObjC.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'clang/lib/Sema/SemaExprObjC.cpp') diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index 582e1834d48..cbf41b5069a 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/lib/Sema/SemaExprObjC.cpp @@ -1137,6 +1137,7 @@ ExprResult Sema::ParseObjCSelectorExpression(Selector Sel, case OMF_mutableCopy: case OMF_new: case OMF_self: + case OMF_initialize: case OMF_performSelector: break; } @@ -2230,6 +2231,17 @@ ExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo, RequireCompleteType(LBracLoc, Method->getReturnType(), 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) { + const ObjCInterfaceDecl *ID = + dyn_cast(Method->getDeclContext()); + if (ID == Class) { + Diag(Loc, diag::warn_direct_initialize_call); + Diag(Method->getLocation(), diag::note_method_declared_at) + << Method->getDeclName(); + } + } // Construct the appropriate ObjCMessageExpr. ObjCMessageExpr *Result; @@ -2652,6 +2664,7 @@ ExprResult Sema::BuildInstanceMessage(Expr *Receiver, case OMF_mutableCopy: case OMF_new: case OMF_self: + case OMF_initialize: break; case OMF_dealloc: -- cgit v1.2.3