|
1 |
| -// Building with regular Swift should succeed |
2 |
| -// RUN: %target-swift-emit-ir %s -parse-stdlib -wmo |
3 |
| - |
4 |
| -// Building with embedded Swift should produce unavailability errors |
5 |
| -// RUN: %target-typecheck-verify-swift -parse-stdlib -enable-experimental-feature Embedded -wmo |
| 1 | +// RUN: %target-typecheck-verify-swift -parse-stdlib -enable-experimental-feature Embedded |
6 | 2 |
|
7 | 3 | // REQUIRES: swift_in_compiler
|
8 | 4 |
|
9 | 5 | @_unavailableInEmbedded
|
10 |
| -public func embedded() { } |
11 |
| -public func regular() { |
12 |
| - embedded() // expected-error {{'embedded()' is unavailable: unavailable in embedded Swift}} |
13 |
| - // expected-note@-3 {{'embedded()' has been explicitly marked unavailable here}} |
14 |
| -} |
| 6 | +public struct UnavailableInEmbedded {} |
| 7 | +// expected-note@-1 {{'UnavailableInEmbedded' has been explicitly marked unavailable here}} |
| 8 | + |
| 9 | +@available(*, unavailable, message: "always unavailable") |
| 10 | +public struct UniverallyUnavailable {} |
| 11 | +// expected-note@-1 {{'UniverallyUnavailable' has been explicitly marked unavailable here}} |
| 12 | + |
| 13 | +@_unavailableInEmbedded |
| 14 | +public func unavailable_in_embedded() { } |
| 15 | +// expected-note@-1 {{'unavailable_in_embedded()' has been explicitly marked unavailable here}} |
| 16 | + |
| 17 | +@available(*, unavailable, message: "always unavailable") |
| 18 | +public func universally_unavailable() { } |
| 19 | +// expected-note@-1 {{'universally_unavailable()' has been explicitly marked unavailable here}} |
15 | 20 |
|
16 | 21 | @_unavailableInEmbedded
|
17 | 22 | public func unused() { } // no error
|
18 | 23 |
|
| 24 | +public struct S1 {} |
| 25 | +public struct S2 {} |
| 26 | + |
19 | 27 | @_unavailableInEmbedded
|
20 |
| -public func called_from_unavailable() { } |
| 28 | +public func has_unavailable_in_embedded_overload(_ s1: S1) { } |
| 29 | + |
| 30 | +public func has_unavailable_in_embedded_overload(_ s2: S2) { } |
| 31 | + |
| 32 | +@available(*, unavailable) |
| 33 | +public func has_universally_unavailable_overload(_ s1: S1) { } |
| 34 | + |
| 35 | +public func has_universally_unavailable_overload(_ s2: S2) { } |
| 36 | + |
| 37 | +public func available( |
| 38 | + _ uie: UnavailableInEmbedded, // expected-error {{'UnavailableInEmbedded' is unavailable: unavailable in embedded Swift}} |
| 39 | + _ uu: UniverallyUnavailable // expected-error {{'UniverallyUnavailable' is unavailable: always unavailable}} |
| 40 | +) { |
| 41 | + unavailable_in_embedded() // expected-error {{'unavailable_in_embedded()' is unavailable: unavailable in embedded Swift}} |
| 42 | + universally_unavailable() // expected-error {{'universally_unavailable()' is unavailable: always unavailable}} |
| 43 | + has_unavailable_in_embedded_overload(.init()) |
| 44 | + has_universally_unavailable_overload(.init()) // not ambiguous, selects available overload |
| 45 | +} |
| 46 | + |
21 | 47 | @_unavailableInEmbedded
|
22 |
| -public func also_embedded() { |
23 |
| - called_from_unavailable() // no error |
| 48 | +public func also_unavailable_in_embedded( |
| 49 | + _ uie: UnavailableInEmbedded, // OK |
| 50 | + _ uu: UniverallyUnavailable // FIXME: should be an error |
| 51 | +) { |
| 52 | + unavailable_in_embedded() // OK |
| 53 | + universally_unavailable() // FIXME: should be an error |
| 54 | + has_unavailable_in_embedded_overload(.init()) // FIXME: should be ambiguous |
| 55 | + has_universally_unavailable_overload(.init()) // not ambiguous, selects available overload |
| 56 | +} |
| 57 | + |
| 58 | +@available(*, unavailable) |
| 59 | +public func also_universally_unavailable( |
| 60 | + _ uie: UnavailableInEmbedded, // OK |
| 61 | + _ uu: UniverallyUnavailable // OK |
| 62 | +) { |
| 63 | + unavailable_in_embedded() // FIXME: should be an error |
| 64 | + universally_unavailable() // FIXME: should be an error |
| 65 | + has_unavailable_in_embedded_overload(.init()) // not ambiguous, selects available overload |
| 66 | + has_universally_unavailable_overload(.init()) // not ambiguous, selects available overload |
24 | 67 | }
|
0 commit comments