diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2015-07-30 19:06:04 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2015-07-30 19:06:04 +0000 |
commit | c0d4b00fee2768bac7dca3362360ad993e0db75b (patch) | |
tree | 7314b3208e0b1ac873730ed168707fe4deaa2447 /clang/lib/Sema/SemaObjCProperty.cpp | |
parent | 64a1bd9db87d61c25be94bc24a3caabd313e3e61 (diff) | |
download | bcm5719-llvm-c0d4b00fee2768bac7dca3362360ad993e0db75b.tar.gz bcm5719-llvm-c0d4b00fee2768bac7dca3362360ad993e0db75b.zip |
[sema] Allow to opt-out of overriding the super class's designated initializers by marking the initializer as unavailable in the subclass.
rdar://20281322
llvm-svn: 243676
Diffstat (limited to 'clang/lib/Sema/SemaObjCProperty.cpp')
-rw-r--r-- | clang/lib/Sema/SemaObjCProperty.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaObjCProperty.cpp b/clang/lib/Sema/SemaObjCProperty.cpp index f139c83c734..02a0cdfee5f 100644 --- a/clang/lib/Sema/SemaObjCProperty.cpp +++ b/clang/lib/Sema/SemaObjCProperty.cpp @@ -1950,10 +1950,16 @@ void Sema::DiagnoseMissingDesignatedInitOverrides( I = DesignatedInits.begin(), E = DesignatedInits.end(); I != E; ++I) { const ObjCMethodDecl *MD = *I; if (!InitSelSet.count(MD->getSelector())) { - Diag(ImplD->getLocation(), - diag::warn_objc_implementation_missing_designated_init_override) - << MD->getSelector(); - Diag(MD->getLocation(), diag::note_objc_designated_init_marked_here); + bool Ignore = false; + if (auto *IMD = IFD->getInstanceMethod(MD->getSelector())) { + Ignore = IMD->isUnavailable(); + } + if (!Ignore) { + Diag(ImplD->getLocation(), + diag::warn_objc_implementation_missing_designated_init_override) + << MD->getSelector(); + Diag(MD->getLocation(), diag::note_objc_designated_init_marked_here); + } } } } |