// First parse this and then emit a *.sib. Then read in the *.sib, then recreate // RUN: %empty-directory(%t) // RUN: %target-sil-opt -sil-print-types %s -emit-sib -o %t/tmp.sib -module-name unmanaged // RUN: %target-sil-opt -sil-print-types %t/tmp.sib -o %t/tmp.2.sib -module-name unmanaged // RUN: %target-sil-opt -sil-print-types %t/tmp.2.sib -module-name unmanaged | %FileCheck %s import Swift import Builtin class C {} // CHECK-LABEL: sil [serialized] [ossa] @retain_release : $@convention(thin) (@sil_unmanaged Optional) -> () { // CHECK: bb0([[ARG:%.*]] : $@sil_unmanaged Optional): // CHECK: [[REF:%.*]] = unmanaged_to_ref [[ARG]] : $@sil_unmanaged Optional to $Optional // CHECK: unmanaged_retain_value [[REF]] // CHECK: unmanaged_autorelease_value [[REF]] // CHECK: unmanaged_release_value [[REF]] sil [serialized] [ossa] @retain_release : $@convention(thin) (@sil_unmanaged Optional) -> () { bb0(%0 : $@sil_unmanaged Optional): %1 = unmanaged_to_ref %0 : $@sil_unmanaged Optional to $Optional unmanaged_retain_value %1 : $Optional unmanaged_autorelease_value %1 : $Optional unmanaged_release_value %1 : $Optional %9999 = tuple() return %9999 : $() } // CHECK-LABEL: sil [serialized] [ossa] @test : $@convention(thin) (@inout Optional) -> () { // CHECK: bb0([[ARG:%.*]] : $*Optional): // CHECK: [[LOADED_ARG:%.*]] = load [copy] [[ARG]] // CHECK: [[UNMANAGED_LOADED_ARG:%.*]] = ref_to_unmanaged [[LOADED_ARG]] : $Optional to $@sil_unmanaged Optional // CHECK: {{%.*}} = unmanaged_to_ref [[UNMANAGED_LOADED_ARG]] : $@sil_unmanaged Optional to $Optional // CHECK: destroy_value [[LOADED_ARG]] sil [serialized] [ossa] @test : $@convention(thin) (@inout Optional) -> () { bb0(%0 : $*Optional): %1 = load [copy] %0 : $*Optional %2 = ref_to_unmanaged %1 : $Optional to $@sil_unmanaged Optional %3 = unmanaged_to_ref %2 : $@sil_unmanaged Optional to $Optional destroy_value %1 : $Optional %9999 = tuple () return %9999 : $() }