22// RUN: %{python} %utils/chex.py < %s > %t/raw_layout.sil
33// RUN: %target-swift-frontend -enable-experimental-feature RawLayout -emit-ir -disable-availability-checking %t/raw_layout.sil | %FileCheck %t/raw_layout.sil --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize
44
5+ import Builtin
56import Swift
67
78// CHECK-LABEL: @"$s{{[A-Za-z0-9_]*}}4LockVWV" = {{.*}} %swift.vwtable
@@ -142,6 +143,33 @@ struct BadBuffer: ~Copyable {
142143 let buffer : SmallVectorOf3 < Int64 ? >
143144}
144145
146+ sil @use_lock : $@convention ( thin) ( @in_guaranteed Lock) -> ( ) {
147+ entry ( % L: $* Lock) :
148+ return undef : $( )
149+ }
150+
151+ sil @use_keymaster_locks : $@convention ( thin) ( @in_guaranteed Keymaster) -> ( ) {
152+ entry ( % K: $* Keymaster) :
153+ % f = function_ref @use_lock : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
154+ % a = struct_element_addr % K : $* Keymaster, #Keymaster. lock1
155+ apply % f( % a) : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
156+ % b = struct_element_addr % K : $* Keymaster, #Keymaster. lock2
157+ apply % f( % b) : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
158+ % c = struct_element_addr % K : $* Keymaster, #Keymaster. lock2
159+ apply % f( % c) : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
160+ return undef : $( )
161+ }
162+
163+ // CHECK: define swiftcc ptr @get_cell_addr(ptr %"Cell<T>", ptr {{.*}} swiftself [[SELF:%.*]])
164+ // CHECK-NEXT: entry:
165+ // CHECK-NEXT: ret ptr [[SELF]]
166+ sil @get_cell_addr : $@convention ( method) < T> ( @in_guaranteed Cell< T > ) -> UnsafeMutablePointer< T> {
167+ entry( % 0 : $* Cell < T > ) :
168+ % 1 = raw_layout_address_to_pointer % 0 : $* Cell< T> to $Builtin. RawPointer
169+ % 2 = struct $UnsafeMutablePointer< T > ( % 1 : $Builtin. RawPointer)
170+ return % 2 : $UnsafeMutablePointer< T>
171+ }
172+
145173// Dependent layout metadata initialization:
146174
147175// Cell<T>
@@ -165,20 +193,3 @@ struct BadBuffer: ~Copyable {
165193
166194// CHECK-LABEL: define {{.*}} swiftcc %swift.metadata_response @"$s{{[A-Za-z0-9_]*}}14SmallVectorBufVMr"(ptr %"SmallVectorBuf<T>", ptr {{.*}}, ptr {{.*}})
167195// CHECK: call void @swift_initRawStructMetadata(ptr %"SmallVectorBuf<T>", {{i64|i32}} 0, ptr {{%.*}}, {{i64|i32}} 8)
168-
169- sil @use_lock : $@convention ( thin) ( @in_guaranteed Lock) -> ( ) {
170- entry ( % L: $* Lock) :
171- return undef : $( )
172- }
173-
174- sil @use_keymaster_locks : $@convention ( thin) ( @in_guaranteed Keymaster) -> ( ) {
175- entry ( % K: $* Keymaster) :
176- % f = function_ref @use_lock : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
177- % a = struct_element_addr % K : $* Keymaster, #Keymaster. lock1
178- apply % f( % a) : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
179- % b = struct_element_addr % K : $* Keymaster, #Keymaster. lock2
180- apply % f( % b) : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
181- % c = struct_element_addr % K : $* Keymaster, #Keymaster. lock2
182- apply % f( % c) : $@convention ( thin) ( @in_guaranteed Lock) -> ( )
183- return undef : $( )
184- }
0 commit comments