summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
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