diff options
author | Douglas Gregor <dgregor@apple.com> | 2013-01-16 00:54:48 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2013-01-16 00:54:48 +0000 |
commit | 72daa3f2de226952825f19d7e60a3e9d77ea8c81 (patch) | |
tree | b1bebf6bd7ebd1aa6221010a5f778208e1b4da28 | |
parent | b9df75f1b83d36be7bfbafc2f25d9fcf768874a3 (diff) |
One can have an unavailable method overridden by an available method,
but not vice-versa. Fix bug introduced in r172567 and noticed by
Jordan, thanks!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172586 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaDeclAttr.cpp | 2 | ||||
-rw-r--r-- | test/SemaObjC/attr-availability.m | 8 |
2 files changed, 5 insertions, 5 deletions
diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index 74a6bc5546..85f48ecff3 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -2057,7 +2057,7 @@ AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, SourceRange Range, !versionsMatch(Deprecated, OldDeprecated, Override) || !versionsMatch(Obsoleted, OldObsoleted, Override) || !(OldIsUnavailable == IsUnavailable || - (Override && OldIsUnavailable && !IsUnavailable))) { + (Override && !OldIsUnavailable && IsUnavailable))) { if (Override) { int Which = -1; VersionTuple FirstVersion; diff --git a/test/SemaObjC/attr-availability.m b/test/SemaObjC/attr-availability.m index 0905733906..bf7ef19bea 100644 --- a/test/SemaObjC/attr-availability.m +++ b/test/SemaObjC/attr-availability.m @@ -11,8 +11,8 @@ - (void)overridden2 __attribute__((availability(macosx,introduced=10.3))); - (void)overridden3 __attribute__((availability(macosx,deprecated=10.3))); - (void)overridden4 __attribute__((availability(macosx,deprecated=10.3))); // expected-note{{overridden method is here}} -- (void)overridden5 __attribute__((availability(macosx,unavailable))); // expected-note{{overridden method is here}} -- (void)overridden6 __attribute__((availability(macosx,introduced=10.3))); +- (void)overridden5 __attribute__((availability(macosx,unavailable))); +- (void)overridden6 __attribute__((availability(macosx,introduced=10.3))); // expected-note{{overridden method is here}} @end // rdar://11475360 @@ -22,8 +22,8 @@ - (void)overridden2 __attribute__((availability(macosx,introduced=10.2))); - (void)overridden3 __attribute__((availability(macosx,deprecated=10.4))); - (void)overridden4 __attribute__((availability(macosx,deprecated=10.2))); // expected-warning{{overriding method deprecated before overridden method on OS X (10.3 vs. 10.2)}} -- (void)overridden5 __attribute__((availability(macosx,introduced=10.3))); // expected-warning{{overriding method cannot be unavailable on OS X when its overridden method is available}} -- (void)overridden6 __attribute__((availability(macosx,unavailable))); +- (void)overridden5 __attribute__((availability(macosx,introduced=10.3))); +- (void)overridden6 __attribute__((availability(macosx,unavailable))); // expected-warning{{overriding method cannot be unavailable on OS X when its overridden method is available}} @end void f(A *a, B *b) { |