llvm-capstone/clang/test/SemaObjC/property-noninherited-availability-attr.m
Manman Ren ccf25bbf3f AvailabilityAttr: we accept "macos" as the platform name.
We continue accepting "macosx" but canonicalize it to "macos", When emitting
diagnostics, we use "macOS" instead of "OS X".

The PlatformName in TargetInfo is changed from "macosx" to "macos" so we can
directly compare the Platform in AvailabilityAttr with the PlatformName
in TargetInfo.

rdar://26795172
rdar://26800775

llvm-svn: 274064
2016-06-28 20:55:30 +00:00

34 lines
1.5 KiB
Objective-C

// RUN: %clang_cc1 -triple x86_64-apple-macosx10.8.0 -fsyntax-only -verify %s
// This test case shows that 'availability' and 'deprecated' do not inherit
// when a property is redeclared in a subclass. This is intentional.
@interface NSObject @end
@protocol myProtocol
@property int myProtocolProperty __attribute__((availability(macosx,introduced=10.7,deprecated=10.8))); // expected-note {{'myProtocolProperty' has been explicitly marked deprecated here}} \
// expected-note {{property 'myProtocolProperty' is declared deprecated here}}
@end
@interface Foo : NSObject
@property int myProperty __attribute__((availability(macosx,introduced=10.7,deprecated=10.8))); // expected-note 2 {{'myProperty' has been explicitly marked deprecated here}} \
// expected-note {{property 'myProperty' is declared deprecated here}}
@end
@interface Bar : Foo <myProtocol>
@property int myProperty;
@property int myProtocolProperty;
@end
void test(Foo *y, Bar *x, id<myProtocol> z) {
y.myProperty = 0; // expected-warning {{'myProperty' is deprecated: first deprecated in macOS 10.8}}
(void)[y myProperty]; // expected-warning {{'myProperty' is deprecated: first deprecated in macOS 10.8}}
x.myProperty = 1; // no-warning
(void)[x myProperty]; // no-warning
x.myProtocolProperty = 0; // no-warning
(void)[x myProtocolProperty]; // no-warning
(void)[z myProtocolProperty]; // expected-warning {{'myProtocolProperty' is deprecated: first deprecated in macOS 10.8}}
}