11// 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
42
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
714
815public enum E : Int {
916 // For some reason, we generate strange SIL for the first case that's
1017 // difficult to validate. This just gets that out of the way.
1118 case sacrificial = - 500
1219
1320 case normal = - 1000
14- @available ( macOS 10 . 8 , iOS 7 , watchOS 1 , tvOS 7 , * )
21+
22+ @available ( macOS 10 . 8 , * )
1523 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 , * )
1726 case potentiallyUnavailable = - 3000
18- @ available ( macOS , unavailable ) @ available ( iOS , unavailable )
19- @available ( watchOS , unavailable ) @ available ( tvOS , unavailable)
27+
28+ @available ( macOS , unavailable)
2029 case neverAvailable = - 4000
21- }
2230
23- // CHECK-LABEL: sil {{(\[serialized\] )?}}[ossa] @$s32enum_raw_representable_available1EO0B5ValueACSgSi_tcfC
31+ }
2432
25- // CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
33+ // CHECK-LABEL: sil {{(\[serialized\] )?}}[ossa] @$s4main1EO8rawValueACSgSi_tcfC
2634
2735// CHECK: integer_literal $Builtin.IntLiteral, -1000
2836// CHECK: cond_br {{[^,]+}}, [[normal:bb[0-9]+]]
2937
30- // CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
31-
3238// CHECK: integer_literal $Builtin.IntLiteral, -2000
3339// CHECK: cond_br {{[^,]+}}, [[alwaysAvailable:bb[0-9]+]]
3440
35- // CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
36-
3741// CHECK: integer_literal $Builtin.IntLiteral, -3000
3842// CHECK: cond_br {{[^,]+}}, [[potentiallyUnavailable:bb[0-9]+]]
3943
40- // CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
41-
4244// CHECK: [[potentiallyUnavailable]]:
4345// CHECK-NEXT: integer_literal $Builtin.Word, 500
4446// CHECK-NEXT: integer_literal $Builtin.Word, 600
4547// CHECK-NEXT: integer_literal $Builtin.Word, 700
4648// CHECK: function_ref @$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF
4749// CHECK: cond_br {{[^,]+}}, [[potentiallyUnavailable_newEnough:bb[0-9]+]],
4850
49- // CHECK-NOT: integer_literal $Builtin.IntLiteral, -4000
50-
5151// CHECK: [[potentiallyUnavailable_newEnough]]:
5252// CHECK: {{enum \$E|inject_enum_addr %[0-9]+ : \$\*E}}, #E.potentiallyUnavailable!enumelt
5353
@@ -59,9 +59,13 @@ public enum E: Int {
5959// CHECK-NOT: function_ref @$ss26_stdlib_isOSVersionAtLeastyBi1_Bw_BwBwtF
6060// CHECK: {{enum \$E|inject_enum_addr %[0-9]+ : \$\*E}}, #E.normal!enumelt
6161
62- // CHECK: end sil function '$s32enum_raw_representable_available1EO0B5ValueACSgSi_tcfC '
62+ // CHECK: end sil function '$s4main1EO8rawValueACSgSi_tcfC '
6363
64- // CHECK-LABEL: sil {{(\[serialized\] )?}}[ossa] @$s32enum_raw_representable_available1EO0B5ValueSivg
64+ // CHECK-LABEL: sil {{(\[serialized\] )?}}[ossa] @$s4main1EO8rawValueSivg
6565// CHECK: {{switch_enum %0 : \$E|switch_enum_addr %2 : \$\*E}}
6666// 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