Skip to content

Commit 27c8e27

Browse files
committed
[SILGen] NFC: Make sure that passing inout/Array argument to variadic pointer parameter is safe
1 parent b5aa817 commit 27c8e27

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

test/SILGen/pointer_conversion.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,3 +481,21 @@ public struct RefObj {
481481
public func objectFieldToPointer(rc: RefObj) {
482482
takeObjectPointer(&rc.o.object)
483483
}
484+
485+
// CHECK-LABEL: sil [ossa] @$s18pointer_conversion21testVariadicParameter1aySaySiGz_tF : $@convention(thin) (@inout Array<Int>) -> ()
486+
// CHECK: [[ARRAY_REF:%.*]] = begin_access [modify] [unknown] %0 : $*Array<Int>
487+
// CHECK: [[CONVERT_ARRAY_TO_POINTER:%.*]] = function_ref @$ss37_convertMutableArrayToPointerArgumentyyXlSg_q_tSayxGzs01_E0R_r0_lF
488+
// CHECK: apply [[CONVERT_ARRAY_TO_POINTER]]<Int, UnsafeMutableRawPointer>({{.*}}, [[ARRAY_REF]])
489+
// CHECK: [[V_REF:%.*]] = begin_access [modify] [unknown] %28 : $*Double
490+
// CHECK: [[DOUBLE_AS_PTR:%.*]] = address_to_pointer [stack_protection] [[V_REF]] : $*Double to $Builtin.RawPointer
491+
// CHECK: [[INOUT_TO_PTR:%.*]] = function_ref @$ss30_convertInOutToPointerArgumentyxBps01_E0RzlF
492+
// CHECK: apply [[INOUT_TO_PTR]]<UnsafeMutableRawPointer>(%39, [[DOUBLE_AS_PTR]])
493+
// CHECK: } // end sil function '$s18pointer_conversion21testVariadicParameter1aySaySiGz_tF'
494+
public func testVariadicParameter(a: inout [Int]) {
495+
func test(_ : UnsafeMutableRawPointer?...) {}
496+
497+
test(&a)
498+
499+
var v: Double
500+
test(&v)
501+
}

0 commit comments

Comments
 (0)