|
| 1 | +// RUN: %target-swift-frontend -enable-sil-opaque-values -emit-sorted-sil -Xllvm -new-mangling-for-tests -Xllvm -sil-full-demangle -parse-stdlib -parse-as-library -emit-silgen -module-name Swift %s | %FileCheck %s |
| 2 | +// UNSUPPORTED: resilient_stdlib |
| 3 | + |
| 4 | +precedencegroup AssignmentPrecedence { assignment: true } |
| 5 | + |
| 6 | +enum Optional<Wrapped> { |
| 7 | + case none |
| 8 | + case some(Wrapped) |
| 9 | +} |
| 10 | + |
| 11 | +protocol EmptyP {} |
| 12 | + |
| 13 | +struct String { var ptr: Builtin.NativeObject } |
| 14 | + |
| 15 | +// Init of Empty protocol + Builtin.NativeObject enum (including opaque tuples as a return value) |
| 16 | +// --- |
| 17 | +// CHECK-LABEL: sil shared [transparent] [thunk] @_TFOs9PAndSEnum1AFMS_FTPs6EmptyP_SS_S_ : $@convention(thin) (@thin PAndSEnum.Type) -> @owned @callee_owned (@in EmptyP, @owned String) -> @out PAndSEnum { |
| 18 | +// CHECK: bb0([[ARG:%.*]] : $@thin PAndSEnum.Type): |
| 19 | +// CHECK: [[RETVAL:%.*]] = partial_apply {{.*}}([[ARG]]) : $@convention(method) (@in EmptyP, @owned String, @thin PAndSEnum.Type) -> @out PAndSEnum |
| 20 | +// CHECK: return [[RETVAL]] : $@callee_owned (@in EmptyP, @owned String) -> @out PAndSEnum |
| 21 | +// CHECK-LABEL: } // end sil function '_TFOs9PAndSEnum1AFMS_FTPs6EmptyP_SS_S_' |
| 22 | +// CHECK-LABEL: sil shared [transparent] @_TFOs9PAndSEnum1AfMS_FTPs6EmptyP_SS_S_ : $@convention(method) (@in EmptyP, @owned String, @thin PAndSEnum.Type) -> @out PAndSEnum { |
| 23 | +// CHECK: bb0([[ARG0:%.*]] : $EmptyP, [[ARG1:%.*]] : $String, [[ARG2:%.*]] : $@thin PAndSEnum.Type): |
| 24 | +// CHECK: [[RTUPLE:%.*]] = tuple ([[ARG0]] : $EmptyP, [[ARG1]] : $String) |
| 25 | +// CHECK: [[RETVAL:%.*]] = enum $PAndSEnum, #PAndSEnum.A!enumelt.1, [[RTUPLE]] : $(EmptyP, String) |
| 26 | +// CHECK: return [[RETVAL]] : $PAndSEnum |
| 27 | +// CHECK-LABEL: } // end sil function '_TFOs9PAndSEnum1AfMS_FTPs6EmptyP_SS_S_' |
| 28 | +enum PAndSEnum { case A(EmptyP, String) } |
| 29 | + |
| 30 | +// Tests Empty protocol + Builtin.NativeObject enum (including opaque tuples as a return value) |
| 31 | +// --- |
| 32 | +// CHECK-LABEL: sil hidden @_TFs21s010______PAndS_casesFT_T_ : $@convention(thin) () -> () { |
| 33 | +// CHECK: bb0: |
| 34 | +// CHECK: [[MTYPE:%.*]] = metatype $@thin PAndSEnum.Type |
| 35 | +// CHECK: [[EAPPLY:%.*]] = apply {{.*}}([[MTYPE]]) : $@convention(thin) (@thin PAndSEnum.Type) -> @owned @callee_owned (@in EmptyP, @owned String) -> @out PAndSEnum |
| 36 | +// CHECK: destroy_value [[EAPPLY]] |
| 37 | +// CHECK: return %{{.*}} : $() |
| 38 | +// CHECK-LABEL: } // end sil function '_TFs21s010______PAndS_casesFT_T_' |
| 39 | +func s010______PAndS_cases() { |
| 40 | + _ = PAndSEnum.A |
| 41 | +} |
0 commit comments