summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2014-08-22 19:52:49 +0000
committerFariborz Jahanian <fjahanian@apple.com>2014-08-22 19:52:49 +0000
commite8b45505bc81a11960c9a714c239871079bad1a8 (patch)
tree53e1417c923002d1a59017f9828329addb426cd2 /clang
parentaf5fd6a4d5db63a2b064ffa0e82e541c1cff2e7c (diff)
downloadbcm5719-llvm-e8b45505bc81a11960c9a714c239871079bad1a8.tar.gz
bcm5719-llvm-e8b45505bc81a11960c9a714c239871079bad1a8.zip
Objective-C. Update my previous patch to not warn if
+initialize is called on 'super' in its implementation. rdar://16628028 llvm-svn: 216282
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/SemaExprObjC.cpp5
-rw-r--r--clang/test/SemaObjC/warn-explicit-call-initialize.m4
2 files changed, 6 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp
index cbf41b5069a..22c55a7726f 100644
--- a/clang/lib/Sema/SemaExprObjC.cpp
+++ b/clang/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<ObjCInterfaceDecl>(Method->getDeclContext());
if (ID == Class) {
diff --git a/clang/test/SemaObjC/warn-explicit-call-initialize.m b/clang/test/SemaObjC/warn-explicit-call-initialize.m
index 786894cb1d7..1c7baef15e6 100644
--- a/clang/test/SemaObjC/warn-explicit-call-initialize.m
+++ b/clang/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
OpenPOWER on IntegriCloud