Ted Kremenek | 0cc6f59 | 2013-04-04 17:58:30 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -triple x86_64-apple-macosx10.8.0 -fsyntax-only -verify %s |
| 2 | |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame] | 3 | // This test case shows that 'availability' and 'deprecated' do not inherit |
Ted Kremenek | 0cc6f59 | 2013-04-04 17:58:30 +0000 | [diff] [blame] | 4 | // when a property is redeclared in a subclass. This is intentional. |
| 5 | |
| 6 | @interface NSObject @end |
| 7 | @protocol myProtocol |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame] | 8 | @property int myProtocolProperty __attribute__((availability(macosx,introduced=10.7,deprecated=10.8))); // expected-note {{'myProtocolProperty' has been explicitly marked deprecated here}} \ |
Ted Kremenek | cb34439 | 2013-04-06 00:34:27 +0000 | [diff] [blame] | 9 | // expected-note {{property 'myProtocolProperty' is declared deprecated here}} |
Ted Kremenek | 0cc6f59 | 2013-04-04 17:58:30 +0000 | [diff] [blame] | 10 | @end |
| 11 | |
| 12 | @interface Foo : NSObject |
Stephen Hines | 651f13c | 2014-04-23 16:59:28 -0700 | [diff] [blame] | 13 | @property int myProperty __attribute__((availability(macosx,introduced=10.7,deprecated=10.8))); // expected-note 2 {{'myProperty' has been explicitly marked deprecated here}} \ |
Ted Kremenek | 0cc6f59 | 2013-04-04 17:58:30 +0000 | [diff] [blame] | 14 | // expected-note {{property 'myProperty' is declared deprecated here}} |
| 15 | @end |
| 16 | |
| 17 | @interface Bar : Foo <myProtocol> |
Ted Kremenek | cb34439 | 2013-04-06 00:34:27 +0000 | [diff] [blame] | 18 | @property int myProperty; |
| 19 | @property int myProtocolProperty; |
Ted Kremenek | 0cc6f59 | 2013-04-04 17:58:30 +0000 | [diff] [blame] | 20 | @end |
| 21 | |
Ted Kremenek | cb34439 | 2013-04-06 00:34:27 +0000 | [diff] [blame] | 22 | void test(Foo *y, Bar *x, id<myProtocol> z) { |
Ted Kremenek | 0cc6f59 | 2013-04-04 17:58:30 +0000 | [diff] [blame] | 23 | y.myProperty = 0; // expected-warning {{'myProperty' is deprecated: first deprecated in OS X 10.8}} |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 24 | (void)[y myProperty]; // expected-warning {{'myProperty' is deprecated: first deprecated in OS X 10.8}} |
Ted Kremenek | 0cc6f59 | 2013-04-04 17:58:30 +0000 | [diff] [blame] | 25 | |
| 26 | x.myProperty = 1; // no-warning |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 27 | (void)[x myProperty]; // no-warning |
Ted Kremenek | 0cc6f59 | 2013-04-04 17:58:30 +0000 | [diff] [blame] | 28 | |
| 29 | x.myProtocolProperty = 0; // no-warning |
| 30 | |
Stephen Hines | 176edba | 2014-12-01 14:53:08 -0800 | [diff] [blame] | 31 | (void)[x myProtocolProperty]; // no-warning |
| 32 | (void)[z myProtocolProperty]; // expected-warning {{'myProtocolProperty' is deprecated: first deprecated in OS X 10.8}} |
Ted Kremenek | 0cc6f59 | 2013-04-04 17:58:30 +0000 | [diff] [blame] | 33 | } |