mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
46 lines
1.3 KiB
Plaintext
46 lines
1.3 KiB
Plaintext
// RUN: %target-sil-opt -enable-sil-verify-all -bcopts %s | %FileCheck %s
|
|
|
|
sil_stage canonical
|
|
|
|
import Builtin
|
|
import Swift
|
|
|
|
struct ArrayBufferOf {
|
|
var Ts: Builtin.NativeObject
|
|
}
|
|
|
|
struct ArrayOf<T> : _DestructorSafeContainer {
|
|
var Buffer : ArrayBufferOf
|
|
}
|
|
|
|
struct Foo {
|
|
@_hasStorage var subFoos: ArrayOf<Foo>
|
|
init()
|
|
}
|
|
|
|
struct MyInt {
|
|
var v : Builtin.Int32
|
|
}
|
|
|
|
// We used to crash on this example in DestructorAnalysis because the type 'Foo'
|
|
// is recursive.
|
|
|
|
// CHECK-LABEL: sil @handle_recursive_types
|
|
|
|
sil @handle_recursive_types : $@convention(c) () -> () {
|
|
bb0:
|
|
%17 = metatype $@thin ArrayOf<Foo>.Type
|
|
%18 = function_ref @array_init : $@convention(thin) (@thin ArrayOf<Foo>.Type) -> @owned ArrayOf<Foo>
|
|
%19 = apply %18(%17) : $@convention(thin) (@thin ArrayOf<Foo>.Type) -> @owned ArrayOf<Foo>
|
|
%25 = function_ref @array_get_count : $@convention(method) (@owned ArrayOf<Foo>) -> MyInt
|
|
retain_value %19 : $ArrayOf<Foo>
|
|
%27 = apply %25(%19) : $@convention(method) (@owned ArrayOf<Foo>) -> MyInt
|
|
%28 = tuple ()
|
|
release_value %19 : $ArrayOf<Foo>
|
|
return %28 : $()
|
|
}
|
|
|
|
sil [serialized] [_semantics "array.init"] @array_init : $@convention(thin) (@thin ArrayOf<Foo>.Type) -> @owned ArrayOf<Foo>
|
|
|
|
sil [serialized] [_semantics "array.get_count"] @array_get_count : $@convention(method) (@owned ArrayOf<Foo>) -> MyInt
|