1
1
// RUN: %target-typecheck-verify-swift
2
- // RUN: %target-swift-emit-silgen -emit-sorted-sil %s | %FileCheck %s
3
- // RUN: %target-swift-emit-silgen -emit-sorted-sil -enable-resilience %s | %FileCheck %s
4
2
5
- // Really just requires a platform with meaningful runtime #available() tests.
6
- // REQUIRES: objc_interop
3
+ // RUN: %target-swift-emit-silgen -emit-sorted-sil -o %t.fragile.sil %s
4
+ // RUN: %FileCheck %s < %t.fragile.sil
5
+ // RUN: %FileCheck -check-prefix NEGATIVE %s < %t.fragile.sil
6
+
7
+ // RUN: %target-swift-emit-silgen -emit-sorted-sil -enable-resilience -o %t.resilient.sil %s
8
+ // RUN: %FileCheck %s < %t.resilient.sil
9
+ // RUN: %FileCheck -check-prefix NEGATIVE %s < %t.resilient.sil
10
+
11
+ // This test just requires a platform with meaningful #available() checks, but
12
+ // for simplicity, it's written for macOS only.
13
+ // REQUIRES: OS=macosx
7
14
8
15
public enum E : Int {
9
16
// For some reason, we generate strange SIL for the first case that's
10
17
// difficult to validate. This just gets that out of the way.
11
18
case sacrificial = - 500
12
19
13
20
case normal = - 1000
14
- @available ( macOS 10 . 8 , iOS 7 , watchOS 1 , tvOS 7 , * )
21
+
22
+ @available ( macOS 10 . 8 , * )
15
23
case alwaysAvailable = - 2000
16
- @available ( macOS 500 . 600 . 700 , iOS 500 . 600 . 700 , watchOS 500 . 600 . 700 , tvOS 500 . 600 . 700 , * )
24
+
25
+ @available ( macOS 500 . 600 . 700 , * )
17
26
case potentiallyUnavailable = - 3000
18
- @ available ( macOS , unavailable ) @ available ( iOS , unavailable )
19
- @available ( watchOS , unavailable ) @ available ( tvOS , unavailable)
27
+
28
+ @available ( macOS , unavailable)
20
29
case neverAvailable = - 4000
21
- }
22
30
23
- // CHECK-LABEL: sil {{(\[serialized\] )?}}[ossa] @$s32enum_raw_representable_available1EO0B5ValueACSgSi_tcfC
31
+ }
24
32
25
- // CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
33
+ // CHECK-LABEL: sil {{(\[serialized\] )?}}[ossa] @$s4main1EO8rawValueACSgSi_tcfC
26
34
27
35
// CHECK: integer_literal $Builtin.IntLiteral, -1000
28
36
// CHECK: cond_br {{[^,]+}}, [[normal:bb[0-9]+]]
29
37
30
- // CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
31
-
32
38
// CHECK: integer_literal $Builtin.IntLiteral, -2000
33
39
// CHECK: cond_br {{[^,]+}}, [[alwaysAvailable:bb[0-9]+]]
34
40
35
- // CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
36
-
37
41
// CHECK: integer_literal $Builtin.IntLiteral, -3000
38
42
// CHECK: cond_br {{[^,]+}}, [[potentiallyUnavailable:bb[0-9]+]]
39
43
40
- // CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
41
-
42
44
// CHECK: [[potentiallyUnavailable]]:
43
45
// CHECK-NEXT: integer_literal $Builtin.Word, 500
44
46
// CHECK-NEXT: integer_literal $Builtin.Word, 600
45
47
// CHECK-NEXT: integer_literal $Builtin.Word, 700
46
48
// CHECK: function_ref @$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF
47
49
// CHECK: cond_br {{[^,]+}}, [[potentiallyUnavailable_newEnough:bb[0-9]+]],
48
50
49
- // CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
50
-
51
51
// CHECK: [[potentiallyUnavailable_newEnough]]:
52
52
// CHECK: {{enum \$E|inject_enum_addr %[0-9]+ : \$\*E}}, #E.potentiallyUnavailable!enumelt
53
53
@@ -59,9 +59,13 @@ public enum E: Int {
59
59
// CHECK-NOT: function_ref @$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF
60
60
// CHECK: {{enum \$E|inject_enum_addr %[0-9]+ : \$\*E}}, #E.normal!enumelt
61
61
62
- // CHECK: end sil function '$s32enum_raw_representable_available1EO0B5ValueACSgSi_tcfC '
62
+ // CHECK: end sil function '$s4main1EO8rawValueACSgSi_tcfC '
63
63
64
- // CHECK-LABEL: sil {{(\[serialized\] )?}}[ossa] @$s32enum_raw_representable_available1EO0B5ValueSivg
64
+ // CHECK-LABEL: sil {{(\[serialized\] )?}}[ossa] @$s4main1EO8rawValueSivg
65
65
// CHECK: {{switch_enum %0 : \$E|switch_enum_addr %2 : \$\*E}}
66
66
// CHECK-NOT: function_ref @$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF
67
- // CHECK: end sil function '$s32enum_raw_representable_available1EO0B5ValueSivg'
67
+ // CHECK: end sil function '$s4main1EO8rawValueSivg'
68
+
69
+ // NEGATIVE-LABEL: sil {{(\[serialized\] )?}}[ossa] @$s4main1EO8rawValueACSgSi_tcfC
70
+ // NEGATIVE-NOT: integer_literal $Builtin.IntLiteral, -4000
71
+ // NEGATIVE: end sil function '$s4main1EO8rawValueACSgSi_tcfC'
0 commit comments