Skip to content

Commit 6525a61

Browse files
committed
Fix SIL test cases for terminator ownership verification.
1 parent 864105c commit 6525a61

20 files changed

+101
-96
lines changed

test/SIL/Serialization/forwarding_ownership.sil

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,6 @@ class Klass {
1616
class SubKlass : Klass {
1717
}
1818

19-
// CHECK-LABEL: sil [ossa] @switch_test : $@convention(thin) () -> () {
20-
// CHECK: switch_enum {{.*}}, forwarding: @guaranteed
21-
// CHECK-LABEL: } // end sil function 'switch_test'
22-
sil [ossa] @switch_test : $@convention(thin) () -> () {
23-
%none = enum $FakeOptional<Klass>, #FakeOptional.none
24-
switch_enum %none : $FakeOptional<Klass>, case #FakeOptional.some!enumelt:bb1, case #FakeOptional.none!enumelt:bb2, forwarding: @guaranteed
25-
26-
bb1(%arg : @guaranteed $Klass):
27-
br bb3
28-
29-
bb2:
30-
br bb3
31-
32-
bb3:
33-
%8 = tuple ()
34-
return %8 : $()
35-
}
36-
3719
// Test checked_cast_br ownership forwarding.
3820
//
3921
// Also test unchecked_ownership_conversion @none serialization (@none
@@ -58,3 +40,22 @@ bb3:
5840
%8 = tuple ()
5941
return %8 : $()
6042
}
43+
44+
// CHECK-LABEL: sil [ossa] @switch_test : $@convention(thin) () -> () {
45+
// CHECK: switch_enum {{.*}}, forwarding: @guaranteed
46+
// CHECK-LABEL: } // end sil function 'switch_test'
47+
sil [ossa] @switch_test : $@convention(thin) () -> () {
48+
%none = enum $FakeOptional<Klass>, #FakeOptional.none
49+
switch_enum %none : $FakeOptional<Klass>, case #FakeOptional.some!enumelt:bb1, case #FakeOptional.none!enumelt:bb2, forwarding: @guaranteed
50+
51+
bb1(%arg : @guaranteed $Klass):
52+
br bb3
53+
54+
bb2:
55+
br bb3
56+
57+
bb3:
58+
%8 = tuple ()
59+
return %8 : $()
60+
}
61+

test/SIL/memory_lifetime.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ bb0(%0 : $*Optional<T>):
417417
%1 = load_borrow %0 : $*Optional<T>
418418
switch_enum %1 : $Optional<T>, case #Optional.some!enumelt: bb1, case #Optional.none!enumelt: bb2
419419

420-
bb1(%3 : $T):
420+
bb1(%3 : @guaranteed $T):
421421
end_borrow %1 : $Optional<T>
422422
%2 = unchecked_take_enum_data_addr %0 : $*Optional<T>, #Optional.some!enumelt
423423
destroy_addr %2 : $*T

test/SIL/memory_lifetime_failures.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ bb0(%0 : $*Optional<T>):
191191
%1 = load_borrow %0 : $*Optional<T>
192192
switch_enum %1 : $Optional<T>, case #Optional.some!enumelt: bb1, case #Optional.none!enumelt: bb2
193193

194-
bb1(%3 : $T):
194+
bb1(%3 : @guaranteed $T):
195195
end_borrow %1 : $Optional<T>
196196
%2 = unchecked_take_enum_data_addr %0 : $*Optional<T>, #Optional.some!enumelt
197197
br bb3

test/SIL/ownership-verifier/use_verifier.sil

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ bb3:
484484
sil [ossa] @switch_enum_owned_payload_test3 : $@convention(thin) () -> () {
485485
bb0:
486486
%1 = enum $Optional<Builtin.NativeObject>, #Optional.none!enumelt
487-
switch_enum %1 : $Optional<Builtin.NativeObject>, case #Optional.none!enumelt: bb1, case #Optional.some!enumelt: bb2
487+
switch_enum %1 : $Optional<Builtin.NativeObject>, case #Optional.none!enumelt: bb1, case #Optional.some!enumelt: bb2, forwarding: @owned
488488

489489
bb1:
490490
br bb3
@@ -597,7 +597,7 @@ bb3:
597597
sil [ossa] @switch_enum_no_payload_test : $@convention(thin) () -> () {
598598
bb0:
599599
%0 = enum $Optional<Builtin.NativeObject>, #Optional.none!enumelt
600-
switch_enum %0 : $Optional<Builtin.NativeObject>, case #Optional.some!enumelt: bb1, case #Optional.none!enumelt: bb2
600+
switch_enum %0 : $Optional<Builtin.NativeObject>, case #Optional.some!enumelt: bb1, case #Optional.none!enumelt: bb2, forwarding: @owned
601601

602602
bb1(%1 : @owned $Builtin.NativeObject):
603603
destroy_value %1 : $Builtin.NativeObject
@@ -676,7 +676,7 @@ bb12:
676676

677677
bb13:
678678
%e2 = enum $ThreeDifferingPayloadEnum, #ThreeDifferingPayloadEnum.trivial_payload!enumelt, %0 : $Builtin.Int32
679-
switch_enum %e2 : $ThreeDifferingPayloadEnum, case #ThreeDifferingPayloadEnum.nontrivial_payload!enumelt: bb16, case #ThreeDifferingPayloadEnum.trivial_payload!enumelt: bb18, case #ThreeDifferingPayloadEnum.nopayload!enumelt: bb20
679+
switch_enum %e2 : $ThreeDifferingPayloadEnum, case #ThreeDifferingPayloadEnum.nontrivial_payload!enumelt: bb16, case #ThreeDifferingPayloadEnum.trivial_payload!enumelt: bb18, case #ThreeDifferingPayloadEnum.nopayload!enumelt: bb20, forwarding: @owned
680680

681681
bb16(%17 : @owned $Builtin.NativeObject):
682682
destroy_value %17 : $Builtin.NativeObject
@@ -689,7 +689,7 @@ bb20:
689689
br bb21
690690

691691
bb21:
692-
switch_enum %e2 : $ThreeDifferingPayloadEnum, case #ThreeDifferingPayloadEnum.trivial_payload!enumelt: bb24, case #ThreeDifferingPayloadEnum.nopayload!enumelt: bb26, case #ThreeDifferingPayloadEnum.nontrivial_payload!enumelt: bb22
692+
switch_enum %e2 : $ThreeDifferingPayloadEnum, case #ThreeDifferingPayloadEnum.trivial_payload!enumelt: bb24, case #ThreeDifferingPayloadEnum.nopayload!enumelt: bb26, case #ThreeDifferingPayloadEnum.nontrivial_payload!enumelt: bb22, forwarding: @owned
693693

694694
bb22(%23 : @owned $Builtin.NativeObject):
695695
destroy_value %23 : $Builtin.NativeObject
@@ -702,7 +702,7 @@ bb26:
702702
br bb27
703703

704704
bb27:
705-
switch_enum %e2 : $ThreeDifferingPayloadEnum, case #ThreeDifferingPayloadEnum.nopayload!enumelt: bb32, case #ThreeDifferingPayloadEnum.nontrivial_payload!enumelt: bb28, case #ThreeDifferingPayloadEnum.trivial_payload!enumelt: bb30
705+
switch_enum %e2 : $ThreeDifferingPayloadEnum, case #ThreeDifferingPayloadEnum.nopayload!enumelt: bb32, case #ThreeDifferingPayloadEnum.nontrivial_payload!enumelt: bb28, case #ThreeDifferingPayloadEnum.trivial_payload!enumelt: bb30, forwarding: @owned
706706

707707
bb28(%29 : @owned $Builtin.NativeObject):
708708
destroy_value %29 : $Builtin.NativeObject
@@ -716,7 +716,7 @@ bb32:
716716

717717
bb33:
718718
%e3 = enum $ThreeDifferingPayloadEnum, #ThreeDifferingPayloadEnum.nopayload!enumelt
719-
switch_enum %e3 : $ThreeDifferingPayloadEnum, case #ThreeDifferingPayloadEnum.nontrivial_payload!enumelt: bb34, case #ThreeDifferingPayloadEnum.trivial_payload!enumelt: bb36, case #ThreeDifferingPayloadEnum.nopayload!enumelt: bb38
719+
switch_enum %e3 : $ThreeDifferingPayloadEnum, case #ThreeDifferingPayloadEnum.nontrivial_payload!enumelt: bb34, case #ThreeDifferingPayloadEnum.trivial_payload!enumelt: bb36, case #ThreeDifferingPayloadEnum.nopayload!enumelt: bb38, forwarding: @owned
720720

721721
bb34(%35 : @owned $Builtin.NativeObject):
722722
destroy_value %35 : $Builtin.NativeObject
@@ -729,7 +729,7 @@ bb38:
729729
br bb39
730730

731731
bb39:
732-
switch_enum %e3 : $ThreeDifferingPayloadEnum, case #ThreeDifferingPayloadEnum.trivial_payload!enumelt: bb42, case #ThreeDifferingPayloadEnum.nopayload!enumelt: bb44, case #ThreeDifferingPayloadEnum.nontrivial_payload!enumelt: bb40
732+
switch_enum %e3 : $ThreeDifferingPayloadEnum, case #ThreeDifferingPayloadEnum.trivial_payload!enumelt: bb42, case #ThreeDifferingPayloadEnum.nopayload!enumelt: bb44, case #ThreeDifferingPayloadEnum.nontrivial_payload!enumelt: bb40, forwarding: @owned
733733

734734
bb40(%41 : @owned $Builtin.NativeObject):
735735
destroy_value %41 : $Builtin.NativeObject
@@ -742,7 +742,7 @@ bb44:
742742
br bb45
743743

744744
bb45:
745-
switch_enum %e3 : $ThreeDifferingPayloadEnum, case #ThreeDifferingPayloadEnum.nopayload!enumelt: bb50, case #ThreeDifferingPayloadEnum.nontrivial_payload!enumelt: bb46, case #ThreeDifferingPayloadEnum.trivial_payload!enumelt: bb48
745+
switch_enum %e3 : $ThreeDifferingPayloadEnum, case #ThreeDifferingPayloadEnum.nopayload!enumelt: bb50, case #ThreeDifferingPayloadEnum.nontrivial_payload!enumelt: bb46, case #ThreeDifferingPayloadEnum.trivial_payload!enumelt: bb48, forwarding: @owned
746746

747747
bb46(%47 : @owned $Builtin.NativeObject):
748748
destroy_value %47 : $Builtin.NativeObject
@@ -1073,7 +1073,7 @@ bb0:
10731073
sil [ossa] @transforming_terminator_undef_test : $@convention(thin) () -> () {
10741074
bb0:
10751075
%0 = unchecked_ref_cast undef : $Builtin.NativeObject to $Builtin.NativeObject
1076-
checked_cast_br %0 : $Builtin.NativeObject to SuperKlass, bb1, bb2
1076+
checked_cast_br %0 : $Builtin.NativeObject to SuperKlass, bb1, bb2, forwarding: @owned
10771077

10781078
bb1(%1 : @owned $SuperKlass):
10791079
destroy_value %1 : $SuperKlass

test/SILGen/switch.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -890,21 +890,21 @@ func test_switch_two_unions(x: Foo, y: Foo) {
890890
// CHECK: function_ref @$s6switch1ayyF
891891
a()
892892

893-
// CHECK: [[IS_NOT_CASE1]](
893+
// CHECK: [[IS_NOT_CASE1]]:
894894
// CHECK: switch_enum [[X]] : $Foo, case #Foo.B!enumelt: [[IS_CASE2:bb[0-9]+]], default [[IS_NOT_CASE2:bb[0-9]+]]
895895
// CHECK: [[IS_CASE2]]:
896896
case (Foo.B, _):
897897
// CHECK: function_ref @$s6switch1byyF
898898
b()
899899

900-
// CHECK: [[IS_NOT_CASE2]](
900+
// CHECK: [[IS_NOT_CASE2]]:
901901
// CHECK: switch_enum [[Y]] : $Foo, case #Foo.B!enumelt: [[IS_CASE3:bb[0-9]+]], default [[UNREACHABLE:bb[0-9]+]]
902902
// CHECK: [[IS_CASE3]]:
903903
case (_, Foo.B):
904904
// CHECK: function_ref @$s6switch1cyyF
905905
c()
906906

907-
// CHECK: [[UNREACHABLE]](
907+
// CHECK: [[UNREACHABLE]]:
908908
// CHECK: unreachable
909909
}
910910
}

test/SILGen/switch_ownership.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,21 @@ func test_switch_two_trivial_unions(x: Foo, y: Foo) {
4242
// CHECK: function_ref @$s6switch1ayyF
4343
a()
4444

45-
// CHECK: [[IS_NOT_CASE1]](
45+
// CHECK: [[IS_NOT_CASE1]]:
4646
// CHECK: switch_enum [[X]] : $Foo, case #Foo.B!enumelt: [[IS_CASE2:bb[0-9]+]], default [[IS_NOT_CASE2:bb[0-9]+]]
4747
// CHECK: [[IS_CASE2]]:
4848
case (Foo.B, _):
4949
// CHECK: function_ref @$s6switch1byyF
5050
b()
5151

52-
// CHECK: [[IS_NOT_CASE2]](
52+
// CHECK: [[IS_NOT_CASE2]]:
5353
// CHECK: switch_enum [[Y]] : $Foo, case #Foo.B!enumelt: [[IS_CASE3:bb[0-9]+]], default [[UNREACHABLE:bb[0-9]+]]
5454
// CHECK: [[IS_CASE3]]:
5555
case (_, Foo.B):
5656
// CHECK: function_ref @$s6switch1cyyF
5757
c()
5858

59-
// CHECK: [[UNREACHABLE]](
59+
// CHECK: [[UNREACHABLE]]:
6060
// CHECK: unreachable
6161
}
6262
}
@@ -77,22 +77,22 @@ func test_switch_two_nontrivial_unions(x: NonTrivialFoo, y: NonTrivialFoo) {
7777
// CHECK: function_ref @$s6switch1ayyF
7878
a()
7979

80-
// CHECK: [[IS_NOT_CASE1]]({{%.*}} : @guaranteed $NonTrivialFoo):
80+
// CHECK: [[IS_NOT_CASE1]]({{%.*}} : @guaranteed $Klass):
8181
// CHECK: [[BORROWED_X:%.*]] = begin_borrow [[X]]
8282
// CHECK: switch_enum [[BORROWED_X]] : $NonTrivialFoo, case #NonTrivialFoo.B!enumelt: [[IS_CASE2:bb[0-9]+]], default [[IS_NOT_CASE2:bb[0-9]+]]
8383
// CHECK: [[IS_CASE2]]({{%.*}} : @guaranteed $Klass)
8484
case (NonTrivialFoo.B, _):
8585
// CHECK: function_ref @$s6switch1byyF
8686
b()
8787

88-
// CHECK: [[IS_NOT_CASE2]]({{%.*}} : @guaranteed $NonTrivialFoo)
88+
// CHECK: [[IS_NOT_CASE2]]({{%.*}} : @guaranteed $Klass)
8989
// CHECK: switch_enum [[Y]] : $NonTrivialFoo, case #NonTrivialFoo.B!enumelt: [[IS_CASE3:bb[0-9]+]], default [[UNREACHABLE:bb[0-9]+]]
9090
// CHECK: [[IS_CASE3]]({{%.*}} : @owned $Klass):
9191
case (_, NonTrivialFoo.B):
9292
// CHECK: function_ref @$s6switch1cyyF
9393
c()
9494

95-
// CHECK: [[UNREACHABLE]]({{%.*}} : @owned $NonTrivialFoo):
95+
// CHECK: [[UNREACHABLE]]({{%.*}} : @owned $Klass):
9696
// CHECK: unreachable
9797
}
9898
}

test/SILOptimizer/accessed_storage_analysis_ossa.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ sil [ossa] @readUnidentifiedArgCaller : $@convention(thin) (@guaranteed Indirect
644644
bb0(%0 : @guaranteed $IndirectEnum, %1 : $Int):
645645
switch_enum %0 : $IndirectEnum, case #IndirectEnum.V!enumelt: bb2, default bb1
646646

647-
bb1(%defaultArg : @guaranteed $IndirectEnum):
647+
bb1:
648648
br bb3(%1 : $Int)
649649

650650
bb2(%7 : @guaranteed ${ var Int }):

test/SILOptimizer/capture_promotion_generic_context.sil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,12 @@ entry(%result : $*Int, %0: $*R<T>, %1 : $*Int, %b : @guaranteed $<τ_0_0> { var
8989
%e = load_borrow %a : $*E<(R<T>)->Int>
9090
switch_enum %e : $E<(R<T>)->Int>, case #E.Some!enumelt : bb1, default bb2
9191

92-
bb1(%f : $@callee_guaranteed @substituted <A, B> (@in_guaranteed A) -> @out B for <R<T>, Int>):
92+
bb1(%f : @guaranteed $@callee_guaranteed @substituted <A, B> (@in_guaranteed A) -> @out B for <R<T>, Int>):
9393
apply %f(%result, %0) : $@callee_guaranteed @substituted <A, B> (@in_guaranteed A) -> @out B for <R<T>, Int>
9494
end_borrow %e : $E<(R<T>)->Int>
9595
br exit
9696

97-
bb2(%default : @guaranteed $E<(R<T>)->Int>):
97+
bb2:
9898
end_borrow %e : $E<(R<T>)->Int>
9999
copy_addr %1 to %result : $*Int
100100
br exit

test/SILOptimizer/capture_promotion_generic_context_ownership.sil

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,7 @@ bb1(%f : @owned $@callee_guaranteed @substituted <τ_0_0, τ_0_1> (@in_guarantee
101101
destroy_value %f : $@callee_guaranteed @substituted <τ_0_0, τ_0_1> (@in_guaranteed τ_0_0) -> @out τ_0_1 for <R<T>, Int>
102102
br exit
103103

104-
bb2(%original : @owned $E<(R<T>)->Int>):
105-
destroy_value %original : $E<(R<T>)->Int>
104+
bb2:
106105
br exit
107106

108107
exit:

test/SILOptimizer/diagnose_unreachable.sil

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -484,8 +484,8 @@ bb1(%2 : @owned $Klass1):
484484
destroy_value %2 : $Klass1
485485
br bb3
486486

487-
bb2(%3 : @owned $Either<Klass1, Klass2>):
488-
destroy_value %3 : $Either<Klass1, Klass2>
487+
bb2(%3 : @owned $Klass2):
488+
destroy_value %3 : $Klass2
489489
br bb3
490490

491491
bb3:
@@ -507,8 +507,8 @@ bb1(%2 : @owned $Klass1):
507507
destroy_value %2 : $Klass1
508508
br bb3
509509

510-
bb2(%3 : @owned $Either<Klass1, Klass2>):
511-
destroy_value %3 : $Either<Klass1, Klass2>
510+
bb2(%3 : @owned $Klass2):
511+
destroy_value %3 : $Klass2
512512
br bb3
513513

514514
bb3:

0 commit comments

Comments
 (0)