Skip to content

Commit c2b845b

Browse files
committed
<rdar://36734699> [Exclusivity] let class properties should not be enforced.
1 parent 3c29bb8 commit c2b845b

12 files changed

+41
-61
lines changed

lib/SILGen/SILGenLValue.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,9 @@ namespace {
597597
SGF.B.createRefElementAddr(loc, base.getUnmanagedValue(),
598598
Field, SubstFieldType);
599599

600-
if (!IsNonAccessing) {
600+
// Avoid emitting access markers completely for non-accesses or immutable
601+
// declarations. Access marker verification is aware of these cases.
602+
if (!IsNonAccessing && !Field->isLet()) {
601603
if (auto enforcement = SGF.getDynamicEnforcement(Field)) {
602604
result = enterAccessScope(SGF, loc, result, getTypeData(),
603605
accessKind, *enforcement);

test/IRGen/class_resilience.swift

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,8 @@ extension ResilientGenericOutsideParent {
196196
// CHECK-NEXT: [[PTR:%.*]] = bitcast %T16class_resilience26ClassWithResilientPropertyC* %0 to i8*
197197
// CHECK-NEXT: [[FIELD_ADDR:%.*]] = getelementptr inbounds i8, i8* [[PTR]], [[INT]] [[OFFSET]]
198198
// CHECK-NEXT: [[FIELD_PTR:%.*]] = bitcast i8* [[FIELD_ADDR]] to %Ts5Int32V*
199-
// CHECK: call void @swift_beginAccess
200199
// CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_PTR]], i32 0, i32 0
201200
// CHECK-NEXT: [[FIELD_VALUE:%.*]] = load i32, i32* [[FIELD_PAYLOAD]]
202-
// CHECK-NEXT: call void @swift_endAccess
203201
// CHECK: ret i32 [[FIELD_VALUE]]
204202

205203
// ClassWithResilientProperty metadata accessor
@@ -225,10 +223,8 @@ extension ResilientGenericOutsideParent {
225223
// CHECK-NEXT: [[PTR:%.*]] = bitcast %T16class_resilience33ClassWithResilientlySizedPropertyC* %0 to i8*
226224
// CHECK-NEXT: [[FIELD_ADDR:%.*]] = getelementptr inbounds i8, i8* [[PTR]], [[INT]] [[OFFSET]]
227225
// CHECK-NEXT: [[FIELD_PTR:%.*]] = bitcast i8* [[FIELD_ADDR]] to %Ts5Int32V*
228-
// CHECK: call void @swift_beginAccess
229226
// CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_PTR]], i32 0, i32 0
230227
// CHECK-NEXT: [[FIELD_VALUE:%.*]] = load i32, i32* [[FIELD_PAYLOAD]]
231-
// CHECK-NEXT: call void @swift_endAccess
232228
// CHECK: ret i32 [[FIELD_VALUE]]
233229

234230
// ClassWithResilientlySizedProperty metadata accessor
@@ -252,10 +248,8 @@ extension ResilientGenericOutsideParent {
252248

253249
// CHECK-LABEL: define{{( protected)?}} swiftcc i32 @"$S16class_resilience30ClassWithIndirectResilientEnumC5colors5Int32Vvg"(%T16class_resilience30ClassWithIndirectResilientEnumC* swiftself)
254250
// CHECK: [[FIELD_PTR:%.*]] = getelementptr inbounds %T16class_resilience30ClassWithIndirectResilientEnumC, %T16class_resilience30ClassWithIndirectResilientEnumC* %0, i32 0, i32 2
255-
// CHECK: call void @swift_beginAccess
256251
// CHECK-NEXT: [[FIELD_PAYLOAD:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_PTR]], i32 0, i32 0
257252
// CHECK-NEXT: [[FIELD_VALUE:%.*]] = load i32, i32* [[FIELD_PAYLOAD]]
258-
// CHECK-NEXT: call void @swift_endAccess
259253
// CHECK: ret i32 [[FIELD_VALUE]]
260254

261255

@@ -303,10 +297,8 @@ extension ResilientGenericOutsideParent {
303297

304298
// CHECK-LABEL: define{{( protected)?}} swiftcc i32 @"$S16class_resilience16MyResilientChildC5fields5Int32Vvg"(%T16class_resilience16MyResilientChildC* swiftself)
305299
// CHECK: [[FIELD_ADDR:%.*]] = getelementptr inbounds %T16class_resilience16MyResilientChildC, %T16class_resilience16MyResilientChildC* %0, i32 0, i32 2
306-
// CHECK: call void @swift_beginAccess
307300
// CHECK-NEXT: [[PAYLOAD_ADDR:%.*]] = getelementptr inbounds %Ts5Int32V, %Ts5Int32V* [[FIELD_ADDR]], i32 0, i32 0
308301
// CHECK-NEXT: [[RESULT:%.*]] = load i32, i32* [[PAYLOAD_ADDR]]
309-
// CHECK-NEXT: call void @swift_endAccess
310302
// CHECK: ret i32 [[RESULT]]
311303

312304

test/SILGen/access_marker_gen.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ public struct HasTwoStoredProperties {
9898

9999
class C {
100100
final var x: Int = 0
101+
let z: Int = 0
101102
}
102103

103104
func testClassInstanceProperties(c: C) {
@@ -116,6 +117,20 @@ func testClassInstanceProperties(c: C) {
116117
// CHECK-NEXT: assign [[Y]] to [[ACCESS]]
117118
// CHECK-NEXT: end_access [[ACCESS]]
118119

120+
func testClassLetProperty(c: C) -> Int {
121+
return c.z
122+
}
123+
124+
// CHECK-LABEL: sil hidden @$S17access_marker_gen20testClassLetProperty1cSiAA1CC_tF : $@convention(thin) (@owned C) -> Int {
125+
// CHECK: bb0(%0 : @owned $C):
126+
// CHECK: [[ADR:%.*]] = ref_element_addr %{{.*}} : $C, #C.z
127+
// CHECK-NOT: begin_access
128+
// CHECK: %{{.*}} = load [trivial] [[ADR]] : $*Int
129+
// CHECK-NOT: end_access
130+
// CHECK: destroy_value %0 : $C
131+
// CHECK: return %{{.*}} : $Int
132+
// CHECK-LABEL: } // end sil function '$S17access_marker_gen20testClassLetProperty1cSiAA1CC_tF'
133+
119134
class D {
120135
var x: Int = 0
121136
}

test/SILGen/guaranteed_self.swift

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -452,16 +452,11 @@ class LetFieldClass {
452452
// CHECK-LABEL: sil hidden @$S15guaranteed_self13LetFieldClassC10letkMethod{{[_0-9a-zA-Z]*}}F : $@convention(method) (@guaranteed LetFieldClass) -> () {
453453
// CHECK: bb0([[CLS:%.*]] : @guaranteed $LetFieldClass):
454454
// CHECK: [[KRAKEN_ADDR:%.*]] = ref_element_addr [[CLS]] : $LetFieldClass, #LetFieldClass.letk
455-
// CHECK-NEXT: [[WRITE:%.*]] = begin_access [read] [dynamic] [[KRAKEN_ADDR]] : $*Kraken
456-
// CHECK-NEXT: [[KRAKEN:%.*]] = load_borrow [[WRITE]]
457-
// CHECK-NEXT: end_access [[WRITE]] : $*Kraken
455+
// CHECK-NEXT: [[KRAKEN:%.*]] = load_borrow [[KRAKEN_ADDR]]
458456
// CHECK-NEXT: [[KRAKEN_METH:%.*]] = class_method [[KRAKEN]]
459457
// CHECK-NEXT: apply [[KRAKEN_METH]]([[KRAKEN]])
460-
// CHECK-NEXT: end_borrow [[KRAKEN]] from [[WRITE]]
461-
// CHECK-NEXT: [[KRAKEN_ADDR:%.*]] = ref_element_addr [[CLS]] : $LetFieldClass, #LetFieldClass.letk
462-
// CHECK: [[READ:%.*]] = begin_access [read] [dynamic] [[KRAKEN_ADDR]] : $*Kraken
463-
// CHECK-NEXT: [[KRAKEN:%.*]] = load [copy] [[READ]]
464-
// CHECK-NEXT: end_access [[READ]] : $*Kraken
458+
// CHECK: [[KRAKEN_ADDR:%.*]] = ref_element_addr [[CLS]] : $LetFieldClass, #LetFieldClass.letk
459+
// CHECK-NEXT: [[KRAKEN:%.*]] = load [copy] [[KRAKEN_ADDR]]
465460
// CHECK: [[BORROWED_KRAKEN:%.*]] = begin_borrow [[KRAKEN]]
466461
// CHECK-NEXT: [[KRAKEN_COPY:%.*]] = copy_value [[BORROWED_KRAKEN]]
467462
// CHECK: [[DESTROY_SHIP_FUN:%.*]] = function_ref @$S15guaranteed_self11destroyShipyyAA6KrakenCF : $@convention(thin) (@owned Kraken) -> ()
@@ -470,9 +465,7 @@ class LetFieldClass {
470465
// CHECK-NEXT: [[KRAKEN_BOX:%.*]] = alloc_box ${ var Kraken }
471466
// CHECK-NEXT: [[PB:%.*]] = project_box [[KRAKEN_BOX]]
472467
// CHECK-NEXT: [[KRAKEN_ADDR:%.*]] = ref_element_addr [[CLS]] : $LetFieldClass, #LetFieldClass.letk
473-
// CHECK-NEXT: [[READ:%.*]] = begin_access [read] [dynamic] [[KRAKEN_ADDR]] : $*Kraken
474-
// CHECK-NEXT: [[KRAKEN2:%.*]] = load [copy] [[READ]]
475-
// CHECK-NEXT: end_access [[READ]] : $*Kraken
468+
// CHECK-NEXT: [[KRAKEN2:%.*]] = load [copy] [[KRAKEN_ADDR]]
476469
// CHECK-NEXT: store [[KRAKEN2]] to [init] [[PB]]
477470
// CHECK-NEXT: [[READ:%.*]] = begin_access [read] [unknown] [[PB]] : $*Kraken
478471
// CHECK-NEXT: [[KRAKEN_COPY:%.*]] = load [copy] [[READ]]

test/SILGen/properties.swift

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -947,8 +947,7 @@ func genericProps(_ x: GenericClass<String>) {
947947
let _ = x.y
948948
// CHECK: [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
949949
// CHECK: [[Z:%.*]] = ref_element_addr [[BORROWED_ARG]] : $GenericClass<String>, #GenericClass.z
950-
// CHECK: [[READ:%.*]] = begin_access [read] [dynamic] [[Z]] : $*String
951-
// CHECK: [[LOADED_Z:%.*]] = load [copy] [[READ]] : $*String
950+
// CHECK: [[LOADED_Z:%.*]] = load [copy] [[Z]] : $*String
952951
// CHECK: destroy_value [[LOADED_Z]]
953952
// CHECK: end_borrow [[BORROWED_ARG]] from [[ARG]]
954953
// CHECK: destroy_value [[ARG]]
@@ -960,8 +959,7 @@ func genericPropsInGenericContext<U>(_ x: GenericClass<U>) {
960959
// CHECK: bb0([[ARG:%.*]] : $GenericClass<U>):
961960
// CHECK: [[BORROWED_ARG:%.*]] = begin_borrow [[ARG]]
962961
// CHECK: [[Z:%.*]] = ref_element_addr [[BORROWED_ARG]] : $GenericClass<U>, #GenericClass.z
963-
// CHECK: [[READ:%.*]] = begin_access [read] [dynamic] [[Z]] : $*U
964-
// CHECK: copy_addr [[READ]] {{.*}} : $*U
962+
// CHECK: copy_addr [[Z]] {{.*}} : $*U
965963
// CHECK: end_borrow [[BORROWED_ARG]] from [[ARG]]
966964
let _ = x.z
967965
}
@@ -978,9 +976,7 @@ class ClassWithLetProperty {
978976
// CHECK: bb0([[ARG:%.*]] : $ClassWithLetProperty):
979977
// CHECK-NEXT: debug_value
980978
// CHECK-NEXT: [[PTR:%[0-9]+]] = ref_element_addr [[ARG]] : $ClassWithLetProperty, #ClassWithLetProperty.p
981-
// CHECK-NEXT: [[READ:%.*]] = begin_access [read] [dynamic] [[PTR]] : $*Int
982-
// CHECK-NEXT: [[VAL:%[0-9]+]] = load [trivial] [[READ]] : $*Int
983-
// CHECK-NEXT: end_access [[READ]] : $*Int
979+
// CHECK-NEXT: [[VAL:%[0-9]+]] = load [trivial] [[PTR]] : $*Int
984980
// CHECK-NEXT: return [[VAL]] : $Int
985981

986982

@@ -1008,18 +1004,15 @@ class r19254812Derived: r19254812Base{
10081004
// Initialization of the pi field: no copy_values/releases.
10091005
// CHECK: [[SELF:%[0-9]+]] = load_borrow [[PB_BOX]] : $*r19254812Derived
10101006
// CHECK-NEXT: [[PIPTR:%[0-9]+]] = ref_element_addr [[SELF]] : $r19254812Derived, #r19254812Derived.pi
1011-
// CHECK-NEXT: [[WRITE:%.*]] = begin_access [modify] [dynamic] [[PIPTR]] : $*Double
1012-
// CHECK-NEXT: assign {{.*}} to [[WRITE]] : $*Double
1007+
// CHECK-NEXT: assign {{.*}} to [[PIPTR]] : $*Double
10131008

10141009
// CHECK-NOT: destroy_value
10151010
// CHECK-NOT: copy_value
10161011

10171012
// Load of the pi field: no copy_values/releases.
10181013
// CHECK: [[SELF:%[0-9]+]] = load_borrow [[PB_BOX]] : $*r19254812Derived
10191014
// CHECK-NEXT: [[PIPTR:%[0-9]+]] = ref_element_addr [[SELF]] : $r19254812Derived, #r19254812Derived.pi
1020-
// CHECK-NEXT: [[READ:%.*]] = begin_access [read] [dynamic] [[PIPTR]] : $*Double
1021-
// CHECK-NEXT: {{.*}} = load [trivial] [[READ]] : $*Double
1022-
// CHECK-NEXT: end_access [[READ]] : $*Double
1015+
// CHECK-NEXT: {{.*}} = load [trivial] [[PIPTR]] : $*Double
10231016
// CHECK: return
10241017
}
10251018

test/SILGen/reabstract-tuple.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,13 @@ class Box<T> {
3333
// CHECK: destroy_value [[TUPLEB]] : $(Int, @callee_guaranteed (@in ()) -> @out ())
3434
// CHECK: [[BORROW_CALL:%.*]] = begin_borrow [[CALL]] : $Box<(Int, () -> ())>
3535
// CHECK: [[REF:%.*]] = ref_element_addr [[BORROW_CALL]] : $Box<(Int, () -> ())>, #Box.value
36-
// CHECK: [[READ:%.*]] = begin_access [read] [dynamic] [[REF]] : $*(Int, @callee_guaranteed (@in ()) -> @out ())
37-
// CHECK: [[TUPLEC:%.*]] = load [copy] [[READ]] : $*(Int, @callee_guaranteed (@in ()) -> @out ())
36+
// CHECK: [[TUPLEC:%.*]] = load [copy] [[REF]] : $*(Int, @callee_guaranteed (@in ()) -> @out ())
3837
// CHECK: [[BORROW_TUPLEC:%.*]] = begin_borrow [[TUPLEC]] : $(Int, @callee_guaranteed (@in ()) -> @out ())
3938
// CHECK: [[TUPLEC_0:%.*]] = tuple_extract [[BORROW_TUPLEC]] : $(Int, @callee_guaranteed (@in ()) -> @out ()), 0
4039
// CHECK: [[TUPLEC_1:%.*]] = tuple_extract [[BORROW_TUPLEC]] : $(Int, @callee_guaranteed (@in ()) -> @out ()), 1
4140
// CHECK: [[COPYC_1:%.*]] = copy_value [[TUPLEC_1]] : $@callee_guaranteed (@in ()) -> @out ()
4241
// CHECK: [[THUNK2:%.*]] = function_ref @$SytytIegir_Ieg_TR : $@convention(thin) (@guaranteed @callee_guaranteed (@in ()) -> @out ()) -> ()
4342
// CHECK: [[PA2:%.*]] = partial_apply [callee_guaranteed] [[THUNK2]]([[COPYC_1]]) : $@convention(thin) (@guaranteed @callee_guaranteed (@in ()) -> @out ()) -> ()
44-
// CHECK: end_access [[READ]] : $*(Int, @callee_guaranteed (@in ()) -> @out ())
4543
// CHECK: destroy_value [[PA2]] : $@callee_guaranteed () -> ()
4644
// CHECK: end_borrow [[BORROW_TUPLEC]] from %{{.*}} : $(Int, @callee_guaranteed (@in ()) -> @out ()), $(Int, @callee_guaranteed (@in ()) -> @out ())
4745
// CHECK: destroy_value [[TUPLEC]] : $(Int, @callee_guaranteed (@in ()) -> @out ())

test/SILGen/super_init_refcounting.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,13 @@ class Good: Foo {
8080
// CHECK: store %0 to [init] [[PB_SELF_BOX]]
8181
// CHECK: [[SELF_OBJ:%.*]] = load_borrow [[PB_SELF_BOX]]
8282
// CHECK: [[X_ADDR:%.*]] = ref_element_addr [[SELF_OBJ]] : $Good, #Good.x
83-
// CHECK: [[WRITE:%.*]] = begin_access [modify] [dynamic] [[X_ADDR]] : $*Int
84-
// CHECK: assign {{.*}} to [[WRITE]] : $*Int
83+
// CHECK: assign {{.*}} to [[X_ADDR]] : $*Int
8584
// CHECK: [[SELF_OBJ:%.*]] = load [take] [[PB_SELF_BOX]] : $*Good
8685
// CHECK: [[SUPER_OBJ:%.*]] = upcast [[SELF_OBJ]] : $Good to $Foo
8786
// CHECK: [[BORROWED_SUPER:%.*]] = begin_borrow [[SUPER_OBJ]]
8887
// CHECK: [[DOWNCAST_BORROWED_SUPER:%.*]] = unchecked_ref_cast [[BORROWED_SUPER]] : $Foo to $Good
8988
// CHECK: [[X_ADDR:%.*]] = ref_element_addr [[DOWNCAST_BORROWED_SUPER]] : $Good, #Good.x
90-
// CHECK: [[READ:%.*]] = begin_access [read] [dynamic] [[X_ADDR]] : $*Int
91-
// CHECK: [[X:%.*]] = load [trivial] [[READ]] : $*Int
89+
// CHECK: [[X:%.*]] = load [trivial] [[X_ADDR]] : $*Int
9290
// CHECK: end_borrow [[BORROWED_SUPER]] from [[SUPER_OBJ]]
9391
// CHECK: [[SUPER_INIT:%.*]] = function_ref @$S22super_init_refcounting3FooCyACSicfc : $@convention(method) (Int, @owned Foo) -> @owned Foo
9492
// CHECK: apply [[SUPER_INIT]]([[X]], [[SUPER_OBJ]])

test/SILGen/unowned.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,9 @@ class TestUnownedMember {
146146
// CHECK: [[BORROWED_ARG1:%.*]] = begin_borrow [[ARG1]]
147147
// CHECK: [[ARG1_COPY:%.*]] = copy_value [[BORROWED_ARG1]]
148148
// CHECK: [[FIELDPTR:%.*]] = ref_element_addr [[BORROWED_SELF]] : $TestUnownedMember, #TestUnownedMember.member
149-
// CHECK: [[WRITE:%.*]] = begin_access [modify] [dynamic] [[FIELDPTR]] : $*@sil_unowned C
150149
// CHECK: [[INVAL:%.*]] = ref_to_unowned [[ARG1_COPY]] : $C to $@sil_unowned C
151150
// CHECK: [[INVAL_COPY:%.*]] = copy_value [[INVAL]] : $@sil_unowned C
152-
// CHECK: assign [[INVAL_COPY]] to [[WRITE]] : $*@sil_unowned C
151+
// CHECK: assign [[INVAL_COPY]] to [[FIELDPTR]] : $*@sil_unowned C
153152
// CHECK: destroy_value [[ARG1_COPY]] : $C
154153
// CHECK: end_borrow [[BORROWED_ARG1]] from [[ARG1]]
155154
// CHECK: end_borrow [[BORROWED_SELF]] from [[SELF]]

test/SILOptimizer/access_marker_verify.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,15 +162,11 @@ class LetClass {
162162
let x = 3
163163
}
164164

165-
// FIXME: should be a [unknown] access.
166-
//
167165
// CHECK-LABEL: sil hidden @$S20access_marker_verify10testGetLet1cSiAA0F5ClassC_tF : $@convention(thin) (@owned LetClass) -> Int {
168166
// CHECK: bb0(%0 : @owned $LetClass):
169167
// CHECK: begin_borrow %0 : $LetClass
170168
// CHECK: ref_element_addr
171-
// CHECK: begin_access [read] [dynamic]
172169
// CHECK: load [trivial]
173-
// CHECK: end_access
174170
// CHECK: end_borrow
175171
// CHECK: destroy_value %0 : $LetClass
176172
// CHECK: return
@@ -202,9 +198,7 @@ final class SubWrapper : BaseClass {
202198
// CHECK-NOT: begin_access
203199
// CHECK: load_borrow
204200
// CHECK: ref_element_addr
205-
// CHECK: begin_access [modify] [dynamic]
206201
// CHECK: assign %0 to
207-
// CHECK: end_access
208202
// CHECK: end_borrow
209203
// CHECK-NOT: begin_access
210204
// CHECK: load [take]

test/SILOptimizer/definite-init-wrongscope.swift

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,14 @@ public class M {
2828

2929
// Make sure the expanded sequence gets the right scope.
3030

31-
// CHECK: %49 = begin_access [modify] [dynamic] %48 : $*C, loc{{.*}}:23:20, scope 2
32-
// CHECK: %50 = integer_literal $Builtin.Int2, 1, loc {{.*}}:20:12, scope 2
33-
// CHECK: %51 = load [trivial] %2 : $*Builtin.Int2, loc {{.*}}:20:12, scope 2
34-
// CHECK: %52 = builtin "or_Int2"(%51 : $Builtin.Int2, %50 : $Builtin.Int2) : $Builtin.Int2, loc {{.*}}:20:12, scope 2
35-
// CHECK: store %52 to [trivial] %2 : $*Builtin.Int2, loc {{.*}}:20:12, scope 2
36-
// CHECK: store %47 to [init] %49 : $*C, loc {{.*}}:23:20, scope 2
37-
// CHECK: end_access %49 : $*C, loc {{.*}}:23:20, scope 2
31+
// CHECK: [[I:%.*]] = integer_literal $Builtin.Int2, 1, loc {{.*}}:20:12, scope 2
32+
// CHECK: [[V:%.*]] = load [trivial] %2 : $*Builtin.Int2, loc {{.*}}:20:12, scope 2
33+
// CHECK: [[OR:%.*]] = builtin "or_Int2"([[V]] : $Builtin.Int2, [[I]] : $Builtin.Int2) : $Builtin.Int2, loc {{.*}}:20:12, scope 2
34+
// CHECK: store [[OR]] to [trivial] %2 : $*Builtin.Int2, loc {{.*}}:20:12, scope 2
35+
// CHECK: store %{{.*}} to [init] %{{.*}} : $*C, loc {{.*}}:23:20, scope 2
3836

3937
// Make sure the dealloc_stack gets the same scope of the instructions surrounding it.
4038

4139
// CHECK: destroy_addr %0 : $*WithDelegate, loc {{.*}}:26:5, scope 2
4240
// CHECK: dealloc_stack %2 : $*Builtin.Int2, loc {{.*}}:20:12, scope 2
43-
// CHECK: throw %92 : $Error, loc {{.*}}:20:12, scope 2
41+
// CHECK: throw %{{.*}} : $Error, loc {{.*}}:20:12, scope 2

test/SILOptimizer/definite_init_failable_initializers_objc.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,7 @@ class Cat : FakeNSObject {
3434
// CHECK-NEXT: [[SELF_BOX:%.*]] = alloc_stack $Cat
3535
// CHECK: store %2 to [[SELF_BOX]] : $*Cat
3636
// CHECK: [[FIELD_ADDR:%.*]] = ref_element_addr %2 : $Cat, #Cat.x
37-
// CHECK-NEXT: [[ACCESS:%.*]] = begin_access [modify] [dynamic] %12 : $*LifetimeTracked
38-
// CHECK-NEXT: store {{%.*}} to [[ACCESS]] : $*LifetimeTracked
39-
// CHECK-NEXT: end_access [[ACCESS]] : $*LifetimeTracked
37+
// CHECK-NEXT: store {{%.*}} to [[FIELD_ADDR]] : $*LifetimeTracked
4038
// CHECK-NEXT: [[COND:%.*]] = struct_extract %1 : $Bool, #Bool._value
4139
// CHECK-NEXT: cond_br [[COND]], bb1, bb2
4240

@@ -46,7 +44,7 @@ class Cat : FakeNSObject {
4644
// CHECK: bb2:
4745
// CHECK-NEXT: [[SUPER:%.*]] = upcast %2 : $Cat to $FakeNSObject
4846
// CHECK-NEXT: [[SUB:%.*]] = unchecked_ref_cast [[SUPER]] : $FakeNSObject to $Cat
49-
// CHECK-NEXT: [[SUPER_FN:%.*]] = objc_super_method %20 : $Cat, #FakeNSObject.init!initializer.1.foreign : (FakeNSObject.Type) -> () -> FakeNSObject, $@convention(objc_method) (@owned FakeNSObject) -> @owned FakeNSObject
47+
// CHECK-NEXT: [[SUPER_FN:%.*]] = objc_super_method [[SUB]] : $Cat, #FakeNSObject.init!initializer.1.foreign : (FakeNSObject.Type) -> () -> FakeNSObject, $@convention(objc_method) (@owned FakeNSObject) -> @owned FakeNSObject
5048
// CHECK-NEXT: [[NEW_SUPER_SELF:%.*]] = apply [[SUPER_FN]]([[SUPER]]) : $@convention(objc_method) (@owned FakeNSObject) -> @owned FakeNSObject
5149
// CHECK-NEXT: [[NEW_SELF:%.*]] = unchecked_ref_cast [[NEW_SUPER_SELF]] : $FakeNSObject to $Cat
5250
// CHECK-NEXT: store [[NEW_SELF]] to [[SELF_BOX]] : $*Cat

test/SILOptimizer/di-conditional-destroy-scope.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
// REQUIRES: objc_interop
77

88

9-
// CHECK: %49 = ref_element_addr %48 : $RecursibleDirectoryContentsGenerator, #RecursibleDirectoryContentsGenerator.fileSystem, loc {{.*}}:38:5, scope 2
10-
// CHECK: destroy_addr %49 : $*FileSystem, loc {{.*}}:38:5, scope 2
9+
// CHECK: [[ADR:%.*]] = ref_element_addr %{{.*}} : $RecursibleDirectoryContentsGenerator, #RecursibleDirectoryContentsGenerator.fileSystem, loc {{.*}}:38:5, scope 2
10+
// CHECK: destroy_addr [[ADR]] : $*FileSystem, loc {{.*}}:38:5, scope 2
1111

1212

1313
import Foundation

0 commit comments

Comments
 (0)