Skip to content

Commit 6babfe3

Browse files
committed
SIL: Enable typed boxes.
Swift SVN r29750
1 parent ac46f00 commit 6babfe3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+677
-727
lines changed

include/swift/AST/SILOptions.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ class SILOptions {
9696
bool EmitProfileCoverageMapping = false;
9797

9898
/// Stage in typed boxes.
99-
bool EnableTypedBoxes = false;
99+
bool EnableTypedBoxes = true;
100100

101101
/// Should we use a pass pipeline passed in via a json file? Null by default.
102102
StringRef ExternalPassPipelineFilename;

lib/SIL/SILType.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ bool SILType::isHeapObjectReferenceType() const {
154154
return true;
155155
if (getSwiftRValueType()->isEqual(C.TheUnknownObjectType))
156156
return true;
157+
if (is<SILBoxType>())
158+
return true;
157159
return false;
158160
}
159161

test/IRGen/boxes.sil

-52
This file was deleted.

test/IRGen/closure.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func b<T : Ordinable>(var seq seq: T) -> (Int) -> Int {
5353
func captures_tuple<T, U>(var x x: (T, U)) -> () -> (T, U) {
5454
// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_getTupleTypeMetadata2(%swift.type* %T, %swift.type* %U, i8* null, i8** null)
5555
// CHECK-NOT: @swift_getTupleTypeMetadata2
56-
// CHECK: [[BOX:%.*]] = call { %swift.refcounted*, %swift.opaque* } @swift_allocBox(%swift.type* [[METADATA]])
56+
// CHECK: [[BOX:%.*]] = call { %swift.refcounted*, %swift.opaque* } @swift_allocBox2(%swift.type* [[METADATA]])
5757
// CHECK: [[ADDR:%.*]] = extractvalue { %swift.refcounted*, %swift.opaque* } [[BOX]], 1
5858
// CHECK: bitcast %swift.opaque* [[ADDR]] to <{}>*
5959
return {x}

test/SIL/Parser/apply_with_substitution.sil

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ bb2: // Preds: bb0
3939
bb4: // Preds: bb2 bb3
4040
%30 = load %3#1 : $*Optional<()>
4141
dealloc_stack %3#0 : $*@local_storage Optional<()> // id: %31
42-
strong_release %1#0 : $Builtin.NativeObject // id: %32
42+
strong_release %1#0 : $@box Optional<() -> ()>
4343
%33 = tuple () // user: %34
4444
return %33 : $() // id: %34
4545
}

test/SIL/Parser/basic.sil

+25-25
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ bb0(%0 : $Int):
6262
bb1:
6363
// Forward reference MRVs.
6464
store %0 to %6#1 : $*Int // CHECK: store %0 to %6#1
65-
strong_release %6#0 : $Builtin.NativeObject // CHECK: strong_release %6#0
65+
strong_release %6#0 : $@box Int // CHECK: strong_release %6#0
6666

6767
return %5 : $() // CHECK: return %5 : $()
6868
bb2:
@@ -296,7 +296,7 @@ bb0(%0 : $*Runcible, %1 : $*protocol<Bendable, Runcible>):
296296
// CHECK: dealloc_stack
297297
%9 = dealloc_stack %4#0 : $*@local_storage protocol<Bendable, Runcible>
298298
// CHECK: release
299-
%10 = strong_release %2#0 : $Builtin.NativeObject
299+
%10 = strong_release %2#0 : $@box protocol<Bendable, Runcible>
300300
// CHECK: return
301301
%11 = return %7 : $()
302302
}
@@ -318,7 +318,7 @@ bb0(%0 : $ClassBound):
318318
%6 = witness_method $@opened("01234567-89ab-cdef-0123-111111111111") ClassBound, #ClassBound.classBoundMethod!1, %5 : $@opened("01234567-89ab-cdef-0123-111111111111") ClassBound : $@convention(witness_method) <T: ClassBound> (T) -> ()
319319
%7 = apply %6<@opened("01234567-89ab-cdef-0123-111111111111") ClassBound>(%5) : $@convention(witness_method) <T: ClassBound> (T) -> ()
320320
%8 = tuple ()
321-
%9 = strong_release %1#0 : $Builtin.NativeObject
321+
%9 = strong_release %1#0 : $@box ClassBound
322322
%10 = return %8 : $()
323323
}
324324

@@ -362,7 +362,7 @@ bb0(%0 : $@thin Aleph.Type):
362362
// CHECK: struct_extract {{%.*}} : $Aleph, #Aleph.a
363363
%15 = struct_extract %14 : $Aleph, #Aleph.a
364364
%16 = strong_retain %15 : $Ref
365-
%17 = strong_release %2#0 : $Builtin.NativeObject
365+
%17 = strong_release %2#0 : $@box Aleph
366366
%18 = return %14 : $Aleph
367367
}
368368

@@ -441,7 +441,7 @@ bb0(%0 : $Int, %1 : $Float):
441441
// CHECK: apply
442442
%24 = apply %19(%17) : $@convention(thin) (Float) -> ()
443443
%25 = tuple ()
444-
%26 = strong_release %2#0 : $Builtin.NativeObject
444+
%26 = strong_release %2#0 : $@box (Int, Float)
445445
%27 = return %25 : $()
446446
}
447447

@@ -465,8 +465,8 @@ bb0(%0 : $Int, %1 : $M):
465465
%10 = store %6 to %9 : $*Int
466466
%11 = strong_release %7 : $M
467467
%12 = tuple ()
468-
%13 = strong_release %4#0 : $Builtin.NativeObject
469-
%14 = strong_release %2#0 : $Builtin.NativeObject
468+
%13 = strong_release %4#0 : $@box M
469+
%14 = strong_release %2#0 : $@box Int
470470
%15 = return %12 : $()
471471
}
472472

@@ -504,7 +504,7 @@ no:
504504
br isa(%n : $Builtin.Int1)
505505
isa(%6 : $Builtin.Int1):
506506
%7 = strong_release %3 : $B
507-
%8 = strong_release %1#0 : $Builtin.NativeObject
507+
%8 = strong_release %1#0 : $@box B
508508
%9 = return %6 : $Builtin.Int1
509509
}
510510

@@ -522,8 +522,8 @@ bb0(%0 : $Builtin.RawPointer, %1 : $Builtin.Word):
522522
%8 = load %3#1 : $*Builtin.Word // CHECK: load
523523
// CHECK: index_raw_pointer {{%.*}} : $Builtin.RawPointer, {{%.*}} : $Builtin.Word
524524
%9 = index_raw_pointer %7 : $Builtin.RawPointer, %8 : $Builtin.Word
525-
%10 = strong_release %3#0 : $Builtin.NativeObject
526-
%11 = strong_release %2#0 : $Builtin.NativeObject
525+
%10 = strong_release %3#0 : $@box Builtin.Word
526+
%11 = strong_release %2#0 : $@box Builtin.RawPointer
527527
%12 = return %9 : $Builtin.RawPointer
528528
}
529529

@@ -568,8 +568,8 @@ bb0(%0 : $SomeClass, %1 : $SomeSubclass):
568568
%15 = tuple (%9 : $@thick SomeClass.Type, %14 : $@thick SomeClass.Type) // CHECK: tuple
569569
%16 = strong_release %11 : $SomeSubclass
570570
%17 = strong_release %7 : $SomeClass
571-
%18 = strong_release %3#0 : $Builtin.NativeObject
572-
%19 = strong_release %2#0 : $Builtin.NativeObject
571+
%18 = strong_release %3#0 : $@box SomeSubclass
572+
%19 = strong_release %2#0 : $@box SomeClass
573573
%20 = return %15 : $(@thick SomeClass.Type, @thick SomeClass.Type)
574574
}
575575

@@ -585,7 +585,7 @@ bb0(%0 : $*T):
585585
%8 = tuple (%3 : $@thick T.Type, %7 : $@thick T.Type) // CHECK: tuple
586586
%9 = destroy_addr %5#1 : $*T
587587
%10 = dealloc_stack %5#0 : $*@local_storage T
588-
%11 = strong_release %1#0 : $Builtin.NativeObject
588+
%11 = strong_release %1#0 : $@box T
589589
%12 = return %8 : $(@thick T.Type, @thick T.Type)
590590
}
591591

@@ -599,7 +599,7 @@ bb0(%0 : $*SomeProtocol):
599599
%6 = existential_metatype $@thick SomeProtocol.Type, %4#1 : $*SomeProtocol
600600
%7 = destroy_addr %4#1 : $*SomeProtocol
601601
%8 = dealloc_stack %4#0 : $*@local_storage SomeProtocol
602-
%9 = strong_release %1#0 : $Builtin.NativeObject
602+
%9 = strong_release %1#0 : $@box SomeProtocol
603603
%10 = return %6 : $@thick SomeProtocol.Type
604604
}
605605

@@ -665,8 +665,8 @@ bb0(%0 : $Builtin.Int1, %1 : $Builtin.Int1):
665665
%9 = load %3#1 : $*Builtin.Int1
666666
// CHECK: builtin "cmp_eq_Int1"({{%.*}} : $Builtin.Int1, {{%.*}} : $Builtin.Int1) : $Builtin.Int1
667667
%10 = builtin "cmp_eq_Int1"(%8 : $Builtin.Int1, %9 : $Builtin.Int1) : $Builtin.Int1
668-
strong_release %3#0 : $Builtin.NativeObject
669-
strong_release %2#0 : $Builtin.NativeObject
668+
strong_release %3#0 : $@box Builtin.Int1
669+
strong_release %2#0 : $@box Builtin.Int1
670670
return %10 : $Builtin.Int1
671671
}
672672

@@ -683,7 +683,7 @@ bb0:
683683
sil @test_dealloc_box : $@convention(thin) () -> () {
684684
bb0:
685685
%0 = alloc_box $Class1
686-
dealloc_box $Class1, %0#0 : $Builtin.NativeObject
686+
dealloc_box %0#0 : $@box Class1
687687
%2 = tuple ()
688688
return %2 : $()
689689
}
@@ -692,18 +692,18 @@ bb0:
692692

693693
// CHECK-LABEL: closure_test
694694
sil @takes_closure : $@convention(thin) (@callee_owned () -> ()) -> ()
695-
sil @closure0 : $@convention(thin) (Builtin.NativeObject, @inout Int) -> ()
695+
sil @closure0 : $@convention(thin) (@box Int, @inout Int) -> ()
696696

697697
sil @closure_test : $@convention(thin) () -> () {
698698
bb0:
699699
%0 = alloc_box $Int // users: %10, %8, %8, %7, %4
700700

701701
%5 = function_ref @takes_closure : $@convention(thin) (@callee_owned () -> ()) -> ()
702-
%6 = function_ref @closure0 : $@convention(thin) (Builtin.NativeObject, @inout Int) -> ()
703-
strong_retain %0#0 : $Builtin.NativeObject
704-
%8 = partial_apply %6(%0#0, %0#1) : $@convention(thin) (Builtin.NativeObject, @inout Int) -> ()
702+
%6 = function_ref @closure0 : $@convention(thin) (@box Int, @inout Int) -> ()
703+
strong_retain %0#0 : $@box Int
704+
%8 = partial_apply %6(%0#0, %0#1) : $@convention(thin) (@box Int, @inout Int) -> ()
705705
%9 = apply %5(%8) : $@convention(thin) (@callee_owned () -> ()) -> ()
706-
strong_release %0#0 : $Builtin.NativeObject
706+
strong_release %0#0 : $@box Int
707707

708708
%11 = tuple ()
709709
return %11 : $()
@@ -764,7 +764,7 @@ bb4(%y : $Int):
764764
bb5:
765765
%15 = function_ref @_T6switch1cFT_T_ : $@convention(thin) () -> () // CHECK: function_ref
766766
%16 = apply %15() : $@convention(thin) () -> ()
767-
strong_release %1#0 : $Builtin.NativeObject // CHECK: release
767+
strong_release %1#0 : $@box MaybePair
768768
%18 = tuple ()
769769
return %18 : $() // CHECK: return
770770
}
@@ -905,7 +905,7 @@ bb0(%0 : $*Bendable, %1 : $Spoon):
905905
deinit_existential_addr %0 : $*Bendable
906906
%5 = load %2#1 : $*Spoon
907907
store %5 to %4 : $*Spoon
908-
strong_release %2#0 : $Builtin.NativeObject
908+
strong_release %2#0 : $@box Spoon
909909
%8 = tuple ()
910910
return %8 : $()
911911
}
@@ -919,7 +919,7 @@ bb0(%0 : $ConcreteClass):
919919
strong_retain %3 : $ConcreteClass
920920
// CHECK: init_existential_ref %{{.*}} : $ConcreteClass : $ConcreteClass, $ClassP
921921
%5 = init_existential_ref %3 : $ConcreteClass : $ConcreteClass, $ClassP
922-
strong_release %1#0 : $Builtin.NativeObject
922+
strong_release %1#0 : $@box ConcreteClass
923923
return %5 : $ClassP
924924
}
925925

test/SIL/Parser/bound_generic.sil

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ bb3:
3636
bb4:
3737
%30 = load %3#1 : $*Optional<()>
3838
dealloc_stack %3#0 : $*@local_storage Optional<()>
39-
strong_release %1#0 : $Builtin.NativeObject
39+
strong_release %1#0 : $@box Optional<() -> ()>
4040
%33 = tuple ()
4141
return %33 : $()
4242
}

test/SIL/Parser/overloaded_member.sil

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ bb0(%0 : $A, %1 : $X):
3131
%11 = load %3#1 : $*A
3232
%12 = apply %9(%10, %11, %7) : $@convention(objc_method) (A, A, @owned X) -> @owned X
3333
assign %12 to %2#1 : $*X
34-
strong_release %3#0 : $Builtin.NativeObject
34+
strong_release %3#0 : $@box A
3535
%15 = load %2#1 : $*X
3636
strong_retain %15 : $X
37-
strong_release %2#0 : $Builtin.NativeObject
37+
strong_release %2#0 : $@box X
3838
return %15 : $X
3939
}

test/SILGen/builtins.swift

+12-12
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func destroy_pod(var x: Builtin.RawPointer) {
6969
// CHECK-NOT: pointer_to_address
7070
// CHECK-NOT: destroy_addr
7171
// CHECK-NOT: release
72-
// CHECK: release %1#0 : $Builtin.NativeObject
72+
// CHECK: release %1#0 : $@box
7373
// CHECK-NOT: release
7474
return Builtin.destroy(Builtin.Int64, x)
7575
// CHECK: return
@@ -576,7 +576,7 @@ func deallocValueBuffer(inout buffer: Builtin.UnsafeValueBuffer) -> () {
576576
// CHECK-NEXT: copy_addr %0 to [initialization] [[BOX]]#1 : $*Optional<Builtin.NativeObject>
577577
// CHECK: [[BUILTIN:%.*]] = is_unique [[BOX]]#1 : $*Optional<Builtin.NativeObject>
578578
// CHECK: copy_addr [[BOX]]#1 to %0 : $*Optional<Builtin.NativeObject>
579-
// CHECK-NEXT: strong_release [[BOX]]#0 : $Builtin.NativeObject
579+
// CHECK-NEXT: strong_release [[BOX]]#0 : $@box Optional<Builtin.NativeObject>
580580
// CHECK-NEXT: return
581581
func isUnique(inout ref: Builtin.NativeObject?) -> Bool {
582582
return _getBool(Builtin.isUnique(&ref))
@@ -589,7 +589,7 @@ func isUnique(inout ref: Builtin.NativeObject?) -> Bool {
589589
// CHECK: copy_addr %0 to [initialization] [[BOX]]#1 : $*Builtin.NativeObject
590590
// CHECK: [[BUILTIN:%.*]] = is_unique [[BOX]]#1 : $*Builtin.NativeObject
591591
// CHECK: copy_addr [[BOX]]#1 to %0 : $*Builtin.NativeObject
592-
// CHECK-NEXT: strong_release [[BOX]]#0 : $Builtin.NativeObject
592+
// CHECK-NEXT: strong_release [[BOX]]#0 : $@box Builtin.NativeObject
593593
// CHECK-NEXT: return
594594
func isUnique(inout ref: Builtin.NativeObject) -> Bool {
595595
return _getBool(Builtin.isUnique(&ref))
@@ -602,7 +602,7 @@ func isUnique(inout ref: Builtin.NativeObject) -> Bool {
602602
// CHECK: copy_addr %0 to [initialization] [[BOX]]#1 : $*Optional<Builtin.NativeObject>
603603
// CHECK: [[BUILTIN:%.*]] = is_unique_or_pinned [[BOX]]#1 : $*Optional<Builtin.NativeObject>
604604
// CHECK: copy_addr [[BOX]]#1 to %0 : $*Optional<Builtin.NativeObject>
605-
// CHECK-NEXT: strong_release [[BOX]]#0 : $Builtin.NativeObject
605+
// CHECK-NEXT: strong_release [[BOX]]#0 : $@box Optional<Builtin.NativeObject>
606606
// CHECK-NEXT: return
607607
func isUniqueOrPinned(inout ref: Builtin.NativeObject?) -> Bool {
608608
return _getBool(Builtin.isUniqueOrPinned(&ref))
@@ -615,7 +615,7 @@ func isUniqueOrPinned(inout ref: Builtin.NativeObject?) -> Bool {
615615
// CHECK: copy_addr %0 to [initialization] [[BOX]]#1 : $*Builtin.NativeObject
616616
// CHECK: [[BUILTIN:%.*]] = is_unique_or_pinned [[BOX]]#1 : $*Builtin.NativeObject
617617
// CHECK: copy_addr [[BOX]]#1 to %0 : $*Builtin.NativeObject
618-
// CHECK-NEXT: strong_release [[BOX]]#0 : $Builtin.NativeObject
618+
// CHECK-NEXT: strong_release [[BOX]]#0 : $@box Builtin.NativeObject
619619
// CHECK-NEXT: return
620620
func isUniqueOrPinned(inout ref: Builtin.NativeObject) -> Bool {
621621
return _getBool(Builtin.isUniqueOrPinned(&ref))
@@ -628,7 +628,7 @@ func isUniqueOrPinned(inout ref: Builtin.NativeObject) -> Bool {
628628
// CHECK: copy_addr %0 to [initialization] [[BOX]]#1 : $*Optional<Builtin.UnknownObject>
629629
// CHECK: [[BUILTIN:%.*]] = is_unique [[BOX]]#1 : $*Optional<Builtin.UnknownObject>
630630
// CHECK: copy_addr [[BOX]]#1 to %0 : $*Optional<Builtin.UnknownObject>
631-
// CHECK-NEXT: strong_release [[BOX]]#0 : $Builtin.NativeObject
631+
// CHECK-NEXT: strong_release [[BOX]]#0 : $@box Optional<Builtin.UnknownObject>
632632
// CHECK-NEXT: return
633633
func isUnique(inout ref: Builtin.UnknownObject?) -> Bool {
634634
return _getBool(Builtin.isUnique(&ref))
@@ -641,7 +641,7 @@ func isUnique(inout ref: Builtin.UnknownObject?) -> Bool {
641641
// CHECK: copy_addr %0 to [initialization] [[BOX]]#1 : $*Builtin.UnknownObject
642642
// CHECK: [[BUILTIN:%.*]] = is_unique [[BOX]]#1 : $*Builtin.UnknownObject
643643
// CHECK: copy_addr [[BOX]]#1 to %0 : $*Builtin.UnknownObject
644-
// CHECK-NEXT: strong_release [[BOX]]#0 : $Builtin.NativeObject
644+
// CHECK-NEXT: strong_release [[BOX]]#0 : $@box Builtin.UnknownObject
645645
// CHECK-NEXT: return
646646
func isUnique(inout ref: Builtin.UnknownObject) -> Bool {
647647
return _getBool(Builtin.isUnique(&ref))
@@ -654,7 +654,7 @@ func isUnique(inout ref: Builtin.UnknownObject) -> Bool {
654654
// CHECK: copy_addr %0 to [initialization] [[BOX]]#1 : $*Builtin.UnknownObject
655655
// CHECK: [[BUILTIN:%.*]] = is_unique_or_pinned [[BOX]]#1 : $*Builtin.UnknownObject
656656
// CHECK: copy_addr [[BOX]]#1 to %0 : $*Builtin.UnknownObject
657-
// CHECK-NEXT: strong_release [[BOX]]#0 : $Builtin.NativeObject
657+
// CHECK-NEXT: strong_release [[BOX]]#0 : $@box Builtin.UnknownObject
658658
// CHECK-NEXT: return
659659
func isUniqueOrPinned(inout ref: Builtin.UnknownObject) -> Bool {
660660
return _getBool(Builtin.isUniqueOrPinned(&ref))
@@ -667,7 +667,7 @@ func isUniqueOrPinned(inout ref: Builtin.UnknownObject) -> Bool {
667667
// CHECK: copy_addr %0 to [initialization] [[BOX]]#1 : $*Builtin.BridgeObject
668668
// CHECK: [[BUILTIN:%.*]] = is_unique [[BOX]]#1 : $*Builtin.BridgeObject
669669
// CHECK: copy_addr [[BOX]]#1 to %0 : $*Builtin.BridgeObject
670-
// CHECK-NEXT: strong_release [[BOX]]#0 : $Builtin.NativeObject
670+
// CHECK-NEXT: strong_release [[BOX]]#0 : $@box Builtin.BridgeObject
671671
// CHECK-NEXT: return
672672
func isUnique(inout ref: Builtin.BridgeObject) -> Bool {
673673
return _getBool(Builtin.isUnique(&ref))
@@ -680,7 +680,7 @@ func isUnique(inout ref: Builtin.BridgeObject) -> Bool {
680680
// CHECK: copy_addr %0 to [initialization] [[BOX]]#1 : $*Builtin.BridgeObject
681681
// CHECK: [[BUILTIN:%.*]] = is_unique_or_pinned [[BOX]]#1 : $*Builtin.BridgeObject
682682
// CHECK: copy_addr [[BOX]]#1 to %0 : $*Builtin.BridgeObject
683-
// CHECK-NEXT: strong_release [[BOX]]#0 : $Builtin.NativeObject
683+
// CHECK-NEXT: strong_release [[BOX]]#0 : $@box Builtin.BridgeObject
684684
// CHECK-NEXT: return
685685
func isUniqueOrPinned(inout ref: Builtin.BridgeObject) -> Bool {
686686
return _getBool(Builtin.isUniqueOrPinned(&ref))
@@ -694,7 +694,7 @@ func isUniqueOrPinned(inout ref: Builtin.BridgeObject) -> Bool {
694694
// CHECK: [[CAST:%.*]] = unchecked_addr_cast [[BOX]]#1 : $*Builtin.BridgeObject to $*Builtin.NativeObject
695695
// CHECK: [[BUILTIN:%.*]] = is_unique [[CAST]] : $*Builtin.NativeObject
696696
// CHECK: copy_addr [[BOX]]#1 to %0 : $*Builtin.BridgeObject
697-
// CHECK-NEXT: strong_release [[BOX]]#0 : $Builtin.NativeObject
697+
// CHECK-NEXT: strong_release [[BOX]]#0 : $@box Builtin.BridgeObject
698698
// CHECK-NEXT: return
699699
func isUnique_native(inout ref: Builtin.BridgeObject) -> Bool {
700700
return _getBool(Builtin.isUnique_native(&ref))
@@ -708,7 +708,7 @@ func isUnique_native(inout ref: Builtin.BridgeObject) -> Bool {
708708
// CHECK: [[CAST:%.*]] = unchecked_addr_cast [[BOX]]#1 : $*Builtin.BridgeObject to $*Builtin.NativeObject
709709
// CHECK: [[BUILTIN:%.*]] = is_unique_or_pinned [[CAST]] : $*Builtin.NativeObject
710710
// CHECK: copy_addr [[BOX]]#1 to %0 : $*Builtin.BridgeObject
711-
// CHECK-NEXT: strong_release [[BOX]]#0 : $Builtin.NativeObject
711+
// CHECK-NEXT: strong_release [[BOX]]#0 : $@box Builtin.BridgeObject
712712
// CHECK-NEXT: return
713713
func isUniqueOrPinned_native(inout ref: Builtin.BridgeObject) -> Bool {
714714
return _getBool(Builtin.isUniqueOrPinned_native(&ref))

0 commit comments

Comments
 (0)