]> granicus.if.org Git - clang/commitdiff
One can have an unavailable method overridden by an available method,
authorDouglas Gregor <dgregor@apple.com>
Wed, 16 Jan 2013 00:54:48 +0000 (00:54 +0000)
committerDouglas Gregor <dgregor@apple.com>
Wed, 16 Jan 2013 00:54:48 +0000 (00:54 +0000)
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

lib/Sema/SemaDeclAttr.cpp
test/SemaObjC/attr-availability.m

index 74a6bc5546edccf3c0d94bca7f917f87a14fa1db..85f48ecff35ba3e1d12c75872369c9e09c93c666 100644 (file)
@@ -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;
index 09057339065b69e1867d8f246c92641ba7b40f5f..bf7ef19beadc6d0ba08a38a1e94c9d1ba55bd682 100644 (file)
@@ -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) {