Skip to content
This repository was archived by the owner on Nov 1, 2021. It is now read-only.

Commit fee7621

Browse files
committed
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 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274064 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent baf7234 commit fee7621

18 files changed

+76
-69
lines changed

include/clang-c/Index.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -2570,7 +2570,7 @@ typedef struct CXPlatformAvailability {
25702570
* \brief A string that describes the platform for which this structure
25712571
* provides availability information.
25722572
*
2573-
* Possible values are "ios" or "macosx".
2573+
* Possible values are "ios" or "macos".
25742574
*/
25752575
CXString Platform;
25762576
/**

include/clang/Basic/Attr.td

+2-2
Original file line numberDiff line numberDiff line change
@@ -477,11 +477,11 @@ def Availability : InheritableAttr {
477477
return llvm::StringSwitch<llvm::StringRef>(Platform)
478478
.Case("android", "Android")
479479
.Case("ios", "iOS")
480-
.Case("macosx", "OS X")
480+
.Case("macos", "macOS")
481481
.Case("tvos", "tvOS")
482482
.Case("watchos", "watchOS")
483483
.Case("ios_app_extension", "iOS (App Extension)")
484-
.Case("macosx_app_extension", "OS X (App Extension)")
484+
.Case("macos_app_extension", "macOS (App Extension)")
485485
.Case("tvos_app_extension", "tvOS (App Extension)")
486486
.Case("watchos_app_extension", "watchOS (App Extension)")
487487
.Default(llvm::StringRef());

include/clang/Basic/AttrDocs.td

+10-10
Original file line numberDiff line numberDiff line change
@@ -691,7 +691,7 @@ the function declaration for a hypothetical function ``f``:
691691

692692
.. code-block:: c++
693693

694-
void f(void) __attribute__((availability(macosx,introduced=10.4,deprecated=10.6,obsoleted=10.7)));
694+
void f(void) __attribute__((availability(macos,introduced=10.4,deprecated=10.6,obsoleted=10.7)));
695695

696696
The availability attribute states that ``f`` was introduced in Mac OS X 10.4,
697697
deprecated in Mac OS X 10.6, and obsoleted in Mac OS X 10.7. This information
@@ -743,7 +743,7 @@ are:
743743
the ``-mios-version-min=*version*`` or ``-miphoneos-version-min=*version*``
744744
command-line arguments.
745745

746-
``macosx``
746+
``macos``
747747
Apple's Mac OS X operating system. The minimum deployment target is
748748
specified by the ``-mmacosx-version-min=*version*`` command-line argument.
749749

@@ -777,24 +777,24 @@ platform. For example:
777777

778778
.. code-block:: c
779779

780-
void g(void) __attribute__((availability(macosx,introduced=10.4)));
781-
void g(void) __attribute__((availability(macosx,introduced=10.4))); // okay, matches
780+
void g(void) __attribute__((availability(macos,introduced=10.4)));
781+
void g(void) __attribute__((availability(macos,introduced=10.4))); // okay, matches
782782
void g(void) __attribute__((availability(ios,introduced=4.0))); // okay, adds a new platform
783-
void g(void); // okay, inherits both macosx and ios availability from above.
784-
void g(void) __attribute__((availability(macosx,introduced=10.5))); // error: mismatch
783+
void g(void); // okay, inherits both macos and ios availability from above.
784+
void g(void) __attribute__((availability(macos,introduced=10.5))); // error: mismatch
785785

786786
When one method overrides another, the overriding method can be more widely available than the overridden method, e.g.,:
787787

788788
.. code-block:: objc
789789

790790
@interface A
791-
- (id)method __attribute__((availability(macosx,introduced=10.4)));
792-
- (id)method2 __attribute__((availability(macosx,introduced=10.4)));
791+
- (id)method __attribute__((availability(macos,introduced=10.4)));
792+
- (id)method2 __attribute__((availability(macos,introduced=10.4)));
793793
@end
794794

795795
@interface B : A
796-
- (id)method __attribute__((availability(macosx,introduced=10.3))); // okay: method moved into base class later
797-
- (id)method __attribute__((availability(macosx,introduced=10.5))); // error: this method was available via the base class in 10.4
796+
- (id)method __attribute__((availability(macos,introduced=10.3))); // okay: method moved into base class later
797+
- (id)method __attribute__((availability(macos,introduced=10.5))); // error: this method was available via the base class in 10.4
798798
@end
799799
}];
800800
}

include/clang/Basic/DiagnosticParseKinds.td

+1-1
Original file line numberDiff line numberDiff line change
@@ -803,7 +803,7 @@ def warn_expected_consistent_version_separator : Warning<
803803
def err_zero_version : Error<
804804
"version number must have non-zero major, minor, or sub-minor version">;
805805
def err_availability_expected_platform : Error<
806-
"expected a platform name, e.g., 'macosx'">;
806+
"expected a platform name, e.g., 'macos'">;
807807

808808
// objc_bridge_related attribute
809809
def err_objcbridge_related_expected_related_class : Error<

lib/AST/Decl.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ static Optional<Visibility> getVisibilityOf(const NamedDecl *D,
222222
// implies visibility(default).
223223
if (D->getASTContext().getTargetInfo().getTriple().isOSDarwin()) {
224224
for (const auto *A : D->specific_attrs<AvailabilityAttr>())
225-
if (A->getPlatform()->getName().equals("macosx"))
225+
if (A->getPlatform()->getName().equals("macos"))
226226
return DefaultVisibility;
227227
}
228228

lib/Basic/Targets.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ static void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
141141
unsigned Maj, Min, Rev;
142142
if (Triple.isMacOSX()) {
143143
Triple.getMacOSXVersion(Maj, Min, Rev);
144-
PlatformName = "macosx";
144+
PlatformName = "macos";
145145
} else {
146146
Triple.getOSVersion(Maj, Min, Rev);
147147
PlatformName = llvm::Triple::getOSTypeName(Triple.getOS());

lib/Parse/ParseDecl.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -880,6 +880,13 @@ void Parser::ParseAvailabilityAttribute(IdentifierInfo &Availability,
880880
return;
881881
}
882882
IdentifierLoc *Platform = ParseIdentifierLoc();
883+
// Canonicalize platform name from "macosx" to "macos".
884+
if (Platform->Ident && Platform->Ident->getName() == "macosx")
885+
Platform->Ident = PP.getIdentifierInfo("macos");
886+
// Canonicalize platform name from "macosx_app_extension" to
887+
// "macos_app_extension".
888+
if (Platform->Ident && Platform->Ident->getName() == "macosx_app_extension")
889+
Platform->Ident = PP.getIdentifierInfo("macos_app_extension");
883890

884891
// Parse the ',' following the platform name.
885892
if (ExpectAndConsume(tok::comma)) {

test/Index/annotate-comments-availability-attrs.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@
1313
void attr_availability_1() __attribute__((availability(macosx,obsoleted=10.0,introduced=8.0,deprecated=9.0, message="use availability_test in <foo.h>")))
1414
__attribute__((availability(ios,unavailable, message="not for iOS")));
1515

16-
// CHECK: FullCommentAsXML=[<Function file="{{[^"]+}}annotate-comments-availability-attrs.cpp" line="[[@LINE-3]]" column="6"><Name>attr_availability_1</Name><USR>c:@F@attr_availability_1#</USR><Declaration>void attr_availability_1()</Declaration><Abstract><Para> Aaa.</Para></Abstract><Availability distribution="iOS"><DeprecationSummary>not for iOS</DeprecationSummary><Unavailable/></Availability><Availability distribution="OS X"><IntroducedInVersion>8.0</IntroducedInVersion><DeprecatedInVersion>9.0</DeprecatedInVersion><RemovedAfterVersion>10.0</RemovedAfterVersion><DeprecationSummary>use availability_test in &lt;foo.h&gt;</DeprecationSummary></Availability></Function>]
16+
// CHECK: FullCommentAsXML=[<Function file="{{[^"]+}}annotate-comments-availability-attrs.cpp" line="[[@LINE-3]]" column="6"><Name>attr_availability_1</Name><USR>c:@F@attr_availability_1#</USR><Declaration>void attr_availability_1()</Declaration><Abstract><Para> Aaa.</Para></Abstract><Availability distribution="iOS"><DeprecationSummary>not for iOS</DeprecationSummary><Unavailable/></Availability><Availability distribution="macOS"><IntroducedInVersion>8.0</IntroducedInVersion><DeprecatedInVersion>9.0</DeprecatedInVersion><RemovedAfterVersion>10.0</RemovedAfterVersion><DeprecationSummary>use availability_test in &lt;foo.h&gt;</DeprecationSummary></Availability></Function>]
1717

1818
/// Aaa.
1919
void attr_availability_2() __attribute__((availability(macosx,obsoleted=10.0.1,introduced=8.0.1,deprecated=9.0.1)));
2020

21-
// CHECK: FullCommentAsXML=[<Function file="{{[^"]+}}annotate-comments-availability-attrs.cpp" line="[[@LINE-2]]" column="6"><Name>attr_availability_2</Name><USR>c:@F@attr_availability_2#</USR><Declaration>void attr_availability_2()</Declaration><Abstract><Para> Aaa.</Para></Abstract><Availability distribution="OS X"><IntroducedInVersion>8.0.1</IntroducedInVersion><DeprecatedInVersion>9.0.1</DeprecatedInVersion><RemovedAfterVersion>10.0.1</RemovedAfterVersion></Availability></Function>]
21+
// CHECK: FullCommentAsXML=[<Function file="{{[^"]+}}annotate-comments-availability-attrs.cpp" line="[[@LINE-2]]" column="6"><Name>attr_availability_2</Name><USR>c:@F@attr_availability_2#</USR><Declaration>void attr_availability_2()</Declaration><Abstract><Para> Aaa.</Para></Abstract><Availability distribution="macOS"><IntroducedInVersion>8.0.1</IntroducedInVersion><DeprecatedInVersion>9.0.1</DeprecatedInVersion><RemovedAfterVersion>10.0.1</RemovedAfterVersion></Availability></Function>]
2222

2323
/// Aaa.
2424
void attr_deprecated_1() __attribute__((deprecated));

test/Index/availability.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ enum {
1414
// RUN: FileCheck -check-prefix=CHECK-1 %s < %t
1515
// RUN: FileCheck -check-prefix=CHECK-2 %s < %t
1616
// CHECK-1: (ios, introduced=3.2, deprecated=4.1)
17-
// CHECK-2: (macosx, introduced=10.4, deprecated=10.5, obsoleted=10.7)
17+
// CHECK-2: (macos, introduced=10.4, deprecated=10.5, obsoleted=10.7)
1818

1919
// CHECK-2: EnumConstantDecl=old_enum:6:3 (Definition) (deprecated)
20-
// CHECK-2: EnumConstantDecl=old_enum_plat:10:3 {{.*}} (macosx, introduced=10.4, deprecated=10.5, obsoleted=10.7)
20+
// CHECK-2: EnumConstantDecl=old_enum_plat:10:3 {{.*}} (macos, introduced=10.4, deprecated=10.5, obsoleted=10.7)

test/Misc/ast-print-objectivec.m

+5-5
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,22 @@ - (void)MethI __attribute__((availability(macosx,introduced=10.1.0,deprecated=10
2020
@end
2121

2222
// CHECK: @protocol P
23-
// CHECK: - (void) MethP __attribute__((availability(macosx, introduced=10.1.0, deprecated=10.2)));
23+
// CHECK: - (void) MethP __attribute__((availability(macos, introduced=10.1.0, deprecated=10.2)));
2424
// CHECK: @end
2525

2626
// CHECK: @interface I : NSObject<P>
27-
// CHECK: - (void) MethI __attribute__((availability(macosx, introduced=10.1.0, deprecated=10.2)));
27+
// CHECK: - (void) MethI __attribute__((availability(macos, introduced=10.1.0, deprecated=10.2)));
2828
// CHECK: @end
2929

3030
// CHECK: @interface I(CAT)
31-
// CHECK: - (void) MethCAT __attribute__((availability(macosx, introduced=10_1_0, deprecated=10_2)));
31+
// CHECK: - (void) MethCAT __attribute__((availability(macos, introduced=10_1_0, deprecated=10_2)));
3232
// CHECK: @end
3333

3434
// CHECK: @implementation I
35-
// CHECK: - (void) MethP __attribute__((availability(macosx, introduced=10.1.0, deprecated=10.2))) {
35+
// CHECK: - (void) MethP __attribute__((availability(macos, introduced=10.1.0, deprecated=10.2))) {
3636
// CHECK: }
3737

38-
// CHECK: - (void) MethI __attribute__((availability(macosx, introduced=10.1.0, deprecated=10.2))) {
38+
// CHECK: - (void) MethI __attribute__((availability(macos, introduced=10.1.0, deprecated=10.2))) {
3939
// CHECK: }
4040

4141
// CHECK: @end

test/Sema/attr-availability-macosx.c

+6-6
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@ void f6(int) __attribute__((availability(macosx,strict,introduced=10.6))); //exp
1515
void test() {
1616
f0(0);
1717
f1(0);
18-
f2(0); // expected-warning{{'f2' is deprecated: first deprecated in OS X 10.5}}
18+
f2(0); // expected-warning{{'f2' is deprecated: first deprecated in macOS 10.5}}
1919
f3(0);
20-
f4(0); // expected-error{{f4' is unavailable: obsoleted in OS X 10.5}}
21-
f5(0); // expected-error{{'f5' is unavailable: not available on OS X}}
22-
f6(0); // expected-error{{'f6' is unavailable: introduced in OS X 10.6}}
20+
f4(0); // expected-error{{f4' is unavailable: obsoleted in macOS 10.5}}
21+
f5(0); // expected-error{{'f5' is unavailable: not available on macOS}}
22+
f6(0); // expected-error{{'f6' is unavailable: introduced in macOS 10.6}}
2323
}
2424

2525
struct __attribute__((availability(macosx,strict,introduced=10.6)))
2626
not_yet_introduced_struct; // \
2727
expected-note{{'not_yet_introduced_struct' has been explicitly marked unavailable here}}
2828

2929
void uses_not_introduced_struct(struct not_yet_introduced_struct *); // \
30-
expected-error{{'not_yet_introduced_struct' is unavailable: introduced in OS X 10.6}}
30+
expected-error{{'not_yet_introduced_struct' is unavailable: introduced in macOS 10.6}}
3131

3232
__attribute__((availability(macosx,strict,introduced=10.6)))
3333
void uses_not_introduced_struct_same_availability(struct not_yet_introduced_struct *);
@@ -53,6 +53,6 @@ struct __attribute__((availability(macosx,strict,introduced=10.9))) type_info //
5353
};
5454
struct type_info;
5555
int test2() {
56-
struct type_info *t; // expected-error{{'type_info' is unavailable: introduced in OS X 10.9}}
56+
struct type_info *t; // expected-error{{'type_info' is unavailable: introduced in macOS 10.9}}
5757
return 0;
5858
}

test/Sema/attr-availability.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// RUN: %clang_cc1 -D WARN_PARTIAL -Wpartial-availability -triple x86_64-apple-darwin9 -fsyntax-only -fblocks -verify %s
33
//
44

5-
void f0() __attribute__((availability(macosx,introduced=10.4,deprecated=10.2))); // expected-warning{{feature cannot be deprecated in OS X version 10.2 before it was introduced in version 10.4; attribute ignored}}
5+
void f0() __attribute__((availability(macosx,introduced=10.4,deprecated=10.2))); // expected-warning{{feature cannot be deprecated in macOS version 10.2 before it was introduced in version 10.4; attribute ignored}}
66
void f1() __attribute__((availability(ios,obsoleted=2.1,deprecated=3.0))); // expected-warning{{feature cannot be obsoleted in iOS version 2.1 before it was deprecated in version 3.0; attribute ignored}}
77
void f2() __attribute__((availability(ios,introduced=2.1,deprecated=2.1)));
88

@@ -26,11 +26,11 @@ enum __attribute__((availability(macosx,introduced=10.8))) PartialEnum {
2626
};
2727

2828
void test_10095131() {
29-
ATSFontGetName("Hello"); // expected-warning {{'ATSFontGetName' is deprecated: first deprecated in OS X 9.0 - use CTFontCopyFullName}}
30-
ATSFontGetPostScriptName(100); // expected-error {{'ATSFontGetPostScriptName' is unavailable: obsoleted in OS X 9.0 - use ATSFontGetFullPostScriptName}}
29+
ATSFontGetName("Hello"); // expected-warning {{'ATSFontGetName' is deprecated: first deprecated in macOS 9.0 - use CTFontCopyFullName}}
30+
ATSFontGetPostScriptName(100); // expected-error {{'ATSFontGetPostScriptName' is unavailable: obsoleted in macOS 9.0 - use ATSFontGetFullPostScriptName}}
3131

3232
#if defined(WARN_PARTIAL)
33-
// expected-warning@+2 {{is partial: introduced in OS X 10.8}} expected-note@+2 {{explicitly redeclare 'PartiallyAvailable' to silence this warning}}
33+
// expected-warning@+2 {{is partial: introduced in macOS 10.8}} expected-note@+2 {{explicitly redeclare 'PartiallyAvailable' to silence this warning}}
3434
#endif
3535
PartiallyAvailable();
3636
}

test/Sema/attr-print.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,5 @@ int * __uptr __ptr32 p32_3;
3333
// CHECK: int * __sptr * __ptr32 ppsp32;
3434
int * __sptr * __ptr32 ppsp32;
3535

36-
// CHECK: __attribute__((availability(macosx, strict, introduced=10.6)));
36+
// CHECK: __attribute__((availability(macos, strict, introduced=10.6)));
3737
void f6(int) __attribute__((availability(macosx,strict,introduced=10.6)));

test/SemaCXX/attr-deprecated-replacement-fixit.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ void new2(int);
1919
void test() {
2020
f_8(0); // expected-warning{{'f_8' is deprecated}}
2121
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:6}:"new8"
22-
f_2(0); // expected-warning{{'f_2' is deprecated: first deprecated in OS X 9.0}}
22+
f_2(0); // expected-warning{{'f_2' is deprecated: first deprecated in macOS 9.0}}
2323
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:3-[[@LINE-1]]:6}:"new2"
2424
}

test/SemaObjC/attr-availability-1.m

+9-9
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,19 @@ - (void)overridden6 __attribute__((availability(macosx,introduced=10_3))); // ex
2525
// rdar://11475360
2626
@interface B : A
2727
- (void)method; // NOTE: we expect 'method' to *not* inherit availability.
28-
- (void)overridden __attribute__((availability(macosx,introduced=10_4))); // expected-warning{{overriding method introduced after overridden method on OS X (10_4 vs. 10_3)}}
28+
- (void)overridden __attribute__((availability(macosx,introduced=10_4))); // expected-warning{{overriding method introduced after overridden method on macOS (10_4 vs. 10_3)}}
2929
- (void)overridden2 __attribute__((availability(macosx,introduced=10_2)));
3030
- (void)overridden3 __attribute__((availability(macosx,deprecated=10_4)));
31-
- (void)overridden4 __attribute__((availability(macosx,deprecated=10_2))); // expected-warning{{overriding method deprecated before overridden method on OS X (10_3 vs. 10_2)}}
31+
- (void)overridden4 __attribute__((availability(macosx,deprecated=10_2))); // expected-warning{{overriding method deprecated before overridden method on macOS (10_3 vs. 10_2)}}
3232
- (void)overridden5 __attribute__((availability(macosx,introduced=10_3)));
33-
- (void)overridden6 __attribute__((availability(macosx,unavailable))); // expected-warning{{overriding method cannot be unavailable on OS X when its overridden method is available}}
33+
- (void)overridden6 __attribute__((availability(macosx,unavailable))); // expected-warning{{overriding method cannot be unavailable on macOS when its overridden method is available}}
3434
@end
3535

3636
void f(A *a, B *b) {
37-
[a method]; // expected-warning{{'method' is deprecated: first deprecated in OS X 10.2}}
37+
[a method]; // expected-warning{{'method' is deprecated: first deprecated in macOS 10.2}}
3838
[b method]; // no-warning
39-
[a proto_method]; // expected-warning{{'proto_method' is deprecated: first deprecated in OS X 10.2}}
40-
[b proto_method]; // expected-warning{{'proto_method' is deprecated: first deprecated in OS X 10.2}}
39+
[a proto_method]; // expected-warning{{'proto_method' is deprecated: first deprecated in macOS 10.2}}
40+
[b proto_method]; // expected-warning{{'proto_method' is deprecated: first deprecated in macOS 10.2}}
4141
}
4242

4343
// Test case for <rdar://problem/11627873>. Warn about
@@ -57,7 +57,7 @@ - (void) method;
5757

5858
@implementation D
5959
- (void) method {
60-
[super method]; // expected-warning {{'method' is deprecated: first deprecated in OS X 10.2}}
60+
[super method]; // expected-warning {{'method' is deprecated: first deprecated in macOS 10.2}}
6161
}
6262
@end
6363

@@ -112,9 +112,9 @@ - (void) always_available __attribute__((availability(macosx,deprecated=NA)));
112112
@end
113113

114114
void foo (A18804883* pa) {
115-
[pa interface_method]; // expected-error {{'interface_method' is unavailable: not available on OS X}}
115+
[pa interface_method]; // expected-error {{'interface_method' is unavailable: not available on macOS}}
116116
[pa proto_method];
117-
[pa strange_method]; // expected-error {{'strange_method' is unavailable: not available on OS X}}
117+
[pa strange_method]; // expected-error {{'strange_method' is unavailable: not available on macOS}}
118118
[pa always_available];
119119
}
120120

0 commit comments

Comments
 (0)