| // RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil -enable-sil-verify-all -global-property-opt %s | %FileCheck %s |
| |
| // REQUIRES: objc_interop |
| |
| sil_stage canonical |
| |
| import Builtin |
| import Swift |
| import SwiftShims |
| |
| public class X { |
| } |
| |
| // CHECK-LABEL: sil @test_unknown_init |
| // CHECK: [[F:%[0-9]+]] = function_ref @_is_native_X_no_type_check |
| // CHECK: [[R:%[0-9]+]] = apply [[F]] |
| // CHECK: return [[R]] |
| sil @test_unknown_init : $@convention(thin) (@owned _ArrayBuffer<X>) -> Bool { |
| bb0(%0 : $_ArrayBuffer<X>): |
| %a1 = struct $Array<X> (%0 : $_ArrayBuffer<X>) |
| |
| %f1 = function_ref @_is_native_X_no_type_check : $@convention(method) (@guaranteed Array<X>) -> Bool |
| %10 = apply %f1(%a1) : $@convention(method) (@guaranteed Array<X>) -> Bool |
| return %10 : $Bool |
| } |
| |
| // CHECK-LABEL: sil @test_buffer_overwritten |
| // CHECK: [[F:%[0-9]+]] = function_ref @_is_native_X_no_type_check |
| // CHECK: [[R:%[0-9]+]] = apply [[F]] |
| // CHECK: return [[R]] |
| sil @test_buffer_overwritten : $@convention(thin) (@owned _ArrayBuffer<X>) -> Bool { |
| bb0(%0 : $_ArrayBuffer<X>): |
| %1 = alloc_stack $Array<X> |
| %3 = function_ref @_array_X_init : $@convention(thin) () -> @owned Array<X> |
| %4 = apply %3() : $@convention(thin) () -> @owned Array<X> |
| store %4 to %1 : $*Array<X> |
| |
| %b1 = struct_element_addr %1 : $*Array<X>, #Array._buffer |
| store %0 to %b1 : $*_ArrayBuffer<X> |
| |
| %5 = load %1 : $*Array<X> |
| %6 = function_ref @_is_native_X_no_type_check : $@convention(method) (@guaranteed Array<X>) -> Bool |
| %10 = apply %6(%5) : $@convention(method) (@guaranteed Array<X>) -> Bool |
| dealloc_stack %1 : $*Array<X> |
| return %10 : $Bool |
| } |
| |
| sil [_semantics "array.init"] @_array_X_init : $@convention(thin) () -> @owned Array<X> |
| |
| sil [_semantics "array.props.isNativeTypeChecked"] @_is_native_X_no_type_check : $@convention(method) (@guaranteed Array<X>) -> Bool |
| |