aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2013-01-16 00:54:48 +0000
committerDouglas Gregor <dgregor@apple.com>2013-01-16 00:54:48 +0000
commit72daa3f2de226952825f19d7e60a3e9d77ea8c81 (patch)
treeb1bebf6bd7ebd1aa6221010a5f778208e1b4da28
parentb9df75f1b83d36be7bfbafc2f25d9fcf768874a3 (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.cpp2
-rw-r--r--test/SemaObjC/attr-availability.m8
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) {