Skip to content

Commit 7f09999

Browse files
committed
[Tests] InitAccessors/NFC: Add a test-case for rdar://112417250
(cherry picked from commit ff19286)
1 parent c3070e0 commit 7f09999

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

test/SILOptimizer/init_accessors.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
// REQUIRES: asserts
66

7+
class NSObject {}
8+
79
struct TestInit {
810
var x: Int
911
var y: Int
@@ -479,3 +481,31 @@ func test_assignments() {
479481
}
480482
}
481483
}
484+
485+
// rdar://112417250 (Crash with macro expansion on generic NSObject subclass)
486+
// self is already borrowed within the initializer.
487+
//
488+
// CHECK-LABEL: sil private [ossa] @$s14init_accessors8testObjCyyF07GenericD9CSubclassL_CyADyxGxcfc : $@convention(method) <T> (@in T, @owned GenericObjCSubclass<T>) -> @owned GenericObjCSubclass<T> {
489+
// CHECK: [[BORROW:%.*]] = load_borrow %{{.*}} : $*GenericObjCSubclass<T>
490+
// CHECK: ref_element_addr [[BORROW]] : $GenericObjCSubclass<T>, #<abstract function>GenericObjCSubclass._value
491+
// CHECK: apply
492+
// CHECK: end_borrow [[BORROW]] : $GenericObjCSubclass<T>
493+
// CHECK-NOT: end_borrow [[BORROW]] : $GenericObjCSubclass<T>
494+
func testObjC() {
495+
class GenericObjCSubclass<T>: NSObject {
496+
var _value: T
497+
498+
var value: T {
499+
@storageRestrictions(initializes: _value)
500+
init {
501+
self._value = newValue
502+
}
503+
get { _value }
504+
set { _value = newValue }
505+
}
506+
507+
init(_ value: T) {
508+
self.value = value
509+
}
510+
}
511+
}

0 commit comments

Comments
 (0)