// First parse this and then emit a *.sib. Then read in the *.sib, then recreate // RUN: %empty-directory(%t) // RUN: %target-sil-opt %s -emit-sib -o %t/tmp.sib -module-name boxes // RUN: %target-sil-opt %t/tmp.sib -emit-sib -o %t/tmp.2.sib -module-name boxes // RUN: %target-sil-opt %t/tmp.2.sib -module-name boxes -emit-sorted-sil | %FileCheck %s // Keep this file in sorted order by using alphabetical prefixes on the SIL functions. sil_stage canonical import Swift protocol P {} struct F {} struct G: P {} struct Q: P {} // TODO: Transform boxes by transforming their arguments, not as single-field, // so that they work as parameters in generic SIL functions. // CHECK-LABEL: sil hidden [ossa] @AA_box_type_parsing : $@convention(thin) ( sil hidden [ossa] @AA_box_type_parsing : $@convention(thin) ( // CHECK: <τ_0_0> { var τ_0_0 } , { var B }, // CHECK: <τ_0_0 where τ_0_0 : P> { let τ_0_0 } , { let C }, // CHECK: <τ_0_0 where τ_0_0 : P> { var τ_0_0 } , { var D }, // CHECK: { let Int }, { let Int }, // CHECK: { var Int, let String }, { var Int, let String }, // CHECK: { }, {}, // CHECK: <τ_0_0, τ_0_1, τ_0_2> { var τ_0_0, let τ_0_2 } > { var X, let Z }> // CHECK: ) -> () ) -> () { entry(%0 : @unowned ${ var E }, %1 : @unowned ${ let F }, %2 : @unowned ${ var G }, %3 : @unowned ${ let Int }, %4 : @unowned ${ var Int, let String }, %5 : @unowned ${}, %6 : @unowned ${ var XX, let ZZ }>): unreachable } // CHECK-LABEL: sil hidden [ossa] @BB_box_type_parsing_in_generic_function : $@convention(thin) ( sil hidden [ossa] @BB_box_type_parsing_in_generic_function : $@convention(thin) ( // CHECK: <τ_0_0> { var τ_0_0 } , { var B }, // CHECK: <τ_0_0 where τ_0_0 : P> { let τ_0_0 } , { let C }, // CHECK: <τ_0_0 where τ_0_0 : P> { var τ_0_0 } , { var D }, // CHECK: { let Int }, { let Int }, // CHECK: { var Int, let String }, { var Int, let String }, // CHECK: { }, {}, // CHECK: <τ_0_0, τ_0_1, τ_0_2> { var τ_0_0, let τ_0_2 } > { var X, let Z }> // CHECK: ) -> () ) -> () { entry(%0 : @unowned ${ var E }, %1 : @unowned ${ let F }, %2 : @unowned ${ var G }, %3 : @unowned ${ let Int }, %4 : @unowned ${ var Int, let String }, %5 : @unowned ${}, %6 : @unowned ${ var XX, let ZZ }>): unreachable } // CHECK-LABEL: sil hidden [ossa] @CC_same_generic_param_name_in_multiple_box_signatures : $@convention(thin) ( sil hidden [ossa] @CC_same_generic_param_name_in_multiple_box_signatures : $@convention(thin) ( // CHECK: <τ_0_0> { var τ_0_0 } , { var A } , // CHECK: <τ_0_0> { var τ_0_0 } { var A } // CHECK: ) -> () ) -> () { entry(%0 : @unowned $ { var A } , %1 : @unowned $ { var A } ): unreachable } // CHECK-LABEL: sil hidden [ossa] @DD_same_generic_param_name_in_outer_scope : $@convention(thin) ( sil hidden [ossa] @DD_same_generic_param_name_in_outer_scope : $@convention(thin) ( // CHECK: <τ_0_0> { var τ_0_0 } { var A } // CHECK: ) -> () ) -> () { entry(%0 : @unowned $ { var B } ): unreachable } // CHECK-LABEL: sil hidden [ossa] @EE_box_ownership : $@convention(thin) (@owned { var Int }, @guaranteed <τ_0_0> { let τ_0_0 } ) -> () sil hidden [ossa] @EE_box_ownership : $@convention(thin) (@owned { var Int }, @guaranteed { let T } ) -> () { entry(%0 : @owned ${ var Int }, %1 : @guaranteed $ { let T } ): unreachable } // CHECK-LABEL: sil hidden [ossa] @FF_address_of_box sil hidden [ossa] @FF_address_of_box : $@convention(thin) (@in { var Int }, @in { let T } ) -> () { // CHECK: %0 : $*{ var Int }, %1 : $*<τ_0_0> { let τ_0_0 } entry(%0 : $*{ var Int }, %1 : $* { let T } ): unreachable } sil @serialize_all : $@convention(thin) () -> () { entry: %0 = function_ref @AA_box_type_parsing : $@convention(thin) ({ var B }, { let C }, { var D }, { let Int }, { var Int, let String }, {}, { var X, let Z }>) -> () %1 = function_ref @BB_box_type_parsing_in_generic_function : $@convention(thin) ({ var B }, { let C }, { var D }, { let Int }, { var Int, let String }, {}, { var X, let Z }>) -> () %2 = function_ref @CC_same_generic_param_name_in_multiple_box_signatures : $@convention(thin) ( { var A } , { var A } ) -> () %3 = function_ref @DD_same_generic_param_name_in_outer_scope : $@convention(thin) ( { var A } ) -> () %4 = function_ref @EE_box_ownership : $@convention(thin) (@owned { var Int }, @guaranteed { let T } ) -> () %5 = function_ref @FF_address_of_box : $@convention(thin) (@in { var Int }, @in { let T } ) -> () unreachable }