Skip to content

Commit 735aa98

Browse files
authored
Merge pull request #77569 from drexin/wip-139708680
[Runtime] Add entry for native swift objc reference to initWithTakeTa…
2 parents 69571db + 591c2cb commit 735aa98

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

stdlib/public/runtime/BytecodeLayouts.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1279,7 +1279,7 @@ constexpr InitFn initWithTakeTable[] = {
12791279
&copyingInitWithTake,
12801280
&copyingInitWithTake,
12811281
&copyingInitWithTake,
1282-
nullptr, // Custom
1282+
&copyingInitWithTake,
12831283
&metatypeInitWithTake,
12841284
nullptr, // Generic
12851285
&existentialInitWithTake,

test/Interpreter/layout_string_witnesses_objc.swift

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,3 +290,51 @@ func testNestedGenericEnumSwiftObjC() {
290290
}
291291

292292
testNestedGenericEnumSwiftObjC()
293+
294+
struct SwiftObjCAndWeakObjC {
295+
let x: SwiftObjC
296+
weak var y: NSObject?
297+
}
298+
299+
func testSwiftObjCAndWeakObjC() {
300+
let ptr = UnsafeMutablePointer<SwiftObjCAndWeakObjC>.allocate(capacity: 1)
301+
302+
// initWithCopy
303+
do {
304+
let x = SwiftObjCAndWeakObjC(x: SwiftObjC(), y: nil)
305+
testInit(ptr, to: x)
306+
}
307+
308+
// assignWithTake
309+
do {
310+
let y = SwiftObjCAndWeakObjC(x: SwiftObjC(), y: nil)
311+
312+
// CHECK-NEXT: Before deinit
313+
print("Before deinit")
314+
315+
// CHECK-NEXT: SwiftObjC deinitialized!
316+
testAssign(ptr, from: y)
317+
}
318+
319+
// assignWithCopy
320+
do {
321+
var z = SwiftObjCAndWeakObjC(x: SwiftObjC(), y: nil)
322+
323+
// CHECK-NEXT: Before deinit
324+
print("Before deinit")
325+
326+
// CHECK-NEXT: SwiftObjC deinitialized!
327+
testAssignCopy(ptr, from: &z)
328+
}
329+
330+
// CHECK-NEXT: Before deinit
331+
print("Before deinit")
332+
333+
// destroy
334+
// CHECK-NEXT: SwiftObjC deinitialized!
335+
testDestroy(ptr)
336+
337+
ptr.deallocate()
338+
}
339+
340+
testSwiftObjCAndWeakObjC()

0 commit comments

Comments
 (0)