|
| 1 | +// RUN: %target-swift-emit-silgen -primary-file %s -disable-availability-checking | %FileCheck %s |
| 2 | +// RUN: %target-swift-emit-sil -primary-file %s -O -disable-availability-checking |
| 3 | + |
| 4 | +// CHECK-LABEL: sil [ossa] @main : $@convention(c) (Int32, UnsafeMutablePointer<Optional<UnsafeMutablePointer<Int8>>>) -> Int32 { |
| 5 | + |
| 6 | +// CHECK: [[BOX:%.*]] = alloc_stack $PrivateClass |
| 7 | +// CHECK: [[FN:%.*]] = function_ref @$s26opaque_result_type_private19returnPrivateOpaqueQryF : $@convention(thin) () -> @out PrivateClass |
| 8 | +// CHECK: apply [[FN]]([[BOX]]) : $@convention(thin) () -> @out PrivateClass |
| 9 | +// CHECK: [[RESULT:%.*]] = load [take] [[BOX]] : $*PrivateClass |
| 10 | +// CHECK: destroy_value [[RESULT]] : $PrivateClass |
| 11 | +// CHECK: dealloc_stack [[BOX]] : $*PrivateClass |
| 12 | +_ = returnPrivateOpaque() |
| 13 | + |
| 14 | +// CHECK: [[BOX:%.*]] = alloc_stack $LocalClass |
| 15 | +// CHECK: [[FN:%.*]] = function_ref @$s26opaque_result_type_private17returnLocalOpaqueQryF : $@convention(thin) () -> @out LocalClass |
| 16 | +// CHECK: apply [[FN]]([[BOX]]) : $@convention(thin) () -> @out LocalClass |
| 17 | +// CHECK: [[RESULT:%.*]] = load [take] [[BOX]] : $*LocalClass |
| 18 | +// CHECK: destroy_value [[RESULT]] : $LocalClass |
| 19 | +// CHECK: dealloc_stack [[BOX]] : $*LocalClass |
| 20 | +_ = returnLocalOpaque() |
| 21 | + |
| 22 | +fileprivate class PrivateClass {} |
| 23 | + |
| 24 | +// CHECK-LABEL: sil hidden [ossa] @$s26opaque_result_type_private19returnPrivateOpaqueQryF : $@convention(thin) () -> @out @_opaqueReturnTypeOf("$s26opaque_result_type_private19returnPrivateOpaqueQryF", 0) 🦸 |
| 25 | +func returnPrivateOpaque() -> some Any { |
| 26 | + return PrivateClass() |
| 27 | +} |
| 28 | + |
| 29 | +// CHECK-LABEL: sil hidden [ossa] @$s26opaque_result_type_private17returnLocalOpaqueQryF : $@convention(thin) () -> @out @_opaqueReturnTypeOf("$s26opaque_result_type_private17returnLocalOpaqueQryF", 0) 🦸 |
| 30 | +func returnLocalOpaque() -> some Any { |
| 31 | + class LocalClass {} |
| 32 | + |
| 33 | + return LocalClass() |
| 34 | +} |
0 commit comments