r221417 - Patch for small addition to availability attribute.
Fariborz Jahanian
fjahanian at apple.com
Wed Nov 5 15:58:55 PST 2014
Author: fjahanian
Date: Wed Nov 5 17:58:55 2014
New Revision: 221417
URL: http://llvm.org/viewvc/llvm-project?rev=221417&view=rev
Log:
Patch for small addition to availability attribute.
This is to accept "NA" in place of vesion number for availability
attribute. Used on introduced=NA to mean unavailable
and deprecated=NA to mean nothing (not deprecated).
rdar://18804883
Modified:
cfe/trunk/lib/Parse/ParseDecl.cpp
cfe/trunk/test/SemaObjC/attr-availability-1.m
Modified: cfe/trunk/lib/Parse/ParseDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=221417&r1=221416&r2=221417&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseDecl.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDecl.cpp Wed Nov 5 17:58:55 2014
@@ -870,6 +870,19 @@ void Parser::ParseAvailabilityAttribute(
break;
}
+ // Special handling of 'NA' only when applied to introduced or
+ // deprecated.
+ if ((Keyword == Ident_introduced || Keyword == Ident_deprecated) &&
+ Tok.is(tok::identifier)) {
+ IdentifierInfo *NA = Tok.getIdentifierInfo();
+ if (NA->getName() == "NA") {
+ ConsumeToken();
+ if (Keyword == Ident_introduced)
+ UnavailableLoc = KeywordLoc;
+ continue;
+ }
+ }
+
SourceRange VersionRange;
VersionTuple Version = ParseVersionTuple(VersionRange);
Modified: cfe/trunk/test/SemaObjC/attr-availability-1.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/attr-availability-1.m?rev=221417&r1=221416&r2=221417&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/attr-availability-1.m (original)
+++ cfe/trunk/test/SemaObjC/attr-availability-1.m Wed Nov 5 17:58:55 2014
@@ -95,3 +95,22 @@ id NSNibOwner, topNibObjects;
- (void)Meth1 __attribute__((availability(macosx,introduced=10.3_0))); // expected-warning {{use same version number separators '_' or '.'}}
- (void)Meth2 __attribute__((availability(macosx,introduced=10_3.1))); // expected-warning {{use same version number separators '_' or '.'}}
@end
+
+// rdar://18804883
+ at protocol P18804883
+- (void)proto_method __attribute__((availability(macosx,introduced=10_1,deprecated=NA))); // means nothing (not deprecated)
+ at end
+
+ at interface A18804883 <P18804883>
+- (void)interface_method __attribute__((availability(macosx,introduced=NA))); // expected-note {{'interface_method' has been explicitly marked unavailable here}}
+- (void)strange_method __attribute__((availability(macosx,introduced=NA,deprecated=NA))); // expected-note {{'strange_method' has been explicitly marked unavailable here}}
+- (void) always_available __attribute__((availability(macosx,deprecated=NA)));
+ at end
+
+void foo (A18804883* pa) {
+ [pa interface_method]; // expected-error {{'interface_method' is unavailable: not available on OS X}}
+ [pa proto_method];
+ [pa strange_method]; // expected-error {{'strange_method' is unavailable: not available on OS X}}
+ [pa always_available];
+}
+
More information about the cfe-commits
mailing list