forked from swiftlang/swift
- Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathavailability.swift
89 lines (73 loc) · 3.69 KB
/
availability.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// RUN: %target-typecheck-verify-swift -parse-stdlib -enable-experimental-feature Embedded
// REQUIRES: swift_in_compiler
// REQUIRES: swift_feature_Embedded
@_unavailableInEmbedded
publicstructUnavailableInEmbedded{}
// expected-note@-1 {{'UnavailableInEmbedded' has been explicitly marked unavailable here}}
@available(*, unavailable, message:"always unavailable")
publicstructUniverallyUnavailable{}
// expected-note@-1 {{'UniverallyUnavailable' has been explicitly marked unavailable here}}
@_unavailableInEmbedded
publicfunc unavailable_in_embedded(){}
// expected-note@-1 {{'unavailable_in_embedded()' has been explicitly marked unavailable here}}
@available(*, unavailable, message:"always unavailable")
publicfunc universally_unavailable(){}
// expected-note@-1 4 {{'universally_unavailable()' has been explicitly marked unavailable here}}
@_unavailableInEmbedded
publicfunc unused(){} // no error
publicstructS1{} // expected-note 2 {{found this candidate}}
publicstructS2{} // expected-note 2 {{found this candidate}}
@_unavailableInEmbedded
publicfunc has_unavailable_in_embedded_overload(_ s1:S1){}
publicfunc has_unavailable_in_embedded_overload(_ s2:S2){}
@available(*, unavailable)
publicfunc has_universally_unavailable_overload(_ s1:S1){}
publicfunc has_universally_unavailable_overload(_ s2:S2){}
publicstructAvailable{}
@_unavailableInEmbedded
extensionAvailable{
publicfunc unavailable_in_embedded_method( // expected-note {{'unavailable_in_embedded_method' has been explicitly marked unavailable here}}
_ uie:UnavailableInEmbedded,
_ uu:UniverallyUnavailable,
_ a:Available,
){
unavailable_in_embedded()
universally_unavailable() // expected-error {{'universally_unavailable()' is unavailable: always unavailable}}
a.unavailable_in_embedded_method(uie, uu, a)
}
}
publicfunc available(
_ uie:UnavailableInEmbedded, // expected-error {{'UnavailableInEmbedded' is unavailable: unavailable in embedded Swift}}
_ uu:UniverallyUnavailable, // expected-error {{'UniverallyUnavailable' is unavailable: always unavailable}}
_ a:Available,
){
unavailable_in_embedded() // expected-error {{'unavailable_in_embedded()' is unavailable: unavailable in embedded Swift}}
universally_unavailable() // expected-error {{'universally_unavailable()' is unavailable: always unavailable}}
a.unavailable_in_embedded_method(uie, uu, a) // expected-error {{'unavailable_in_embedded_method' is unavailable: unavailable in embedded Swift}}
has_unavailable_in_embedded_overload(.init())
has_universally_unavailable_overload(.init()) // not ambiguous, selects available overload
}
@_unavailableInEmbedded
publicfunc also_unavailable_in_embedded(
_ uie:UnavailableInEmbedded, // OK
_ uu:UniverallyUnavailable, // OK
_ a:Available,
){
unavailable_in_embedded() // OK
universally_unavailable() // expected-error {{'universally_unavailable()' is unavailable: always unavailable}}
a.unavailable_in_embedded_method(uie, uu, a)
has_unavailable_in_embedded_overload(.init()) // expected-error {{ambiguous use of 'init()'}}
has_universally_unavailable_overload(.init()) // not ambiguous, selects available overload
}
@available(*, unavailable)
publicfunc also_universally_unavailable(
_ uie:UnavailableInEmbedded, // OK
_ uu:UniverallyUnavailable, // OK
_ a:Available,
){
unavailable_in_embedded()
universally_unavailable() // expected-error {{'universally_unavailable()' is unavailable: always unavailable}}
a.unavailable_in_embedded_method(uie, uu, a)
has_unavailable_in_embedded_overload(.init()) // expected-error {{ambiguous use of 'init()'}}
has_universally_unavailable_overload(.init()) // not ambiguous, selects available overload
}