// RUN: %target-swift-frontend -emit-silgen %s | %FileCheck %s sil_stage raw 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 @box_type_parsing : $@convention(thin) ( sil @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 : ${ var E }, %1 : ${ let F }, %2 : ${ var G }, %3 : ${ let Int }, %4 : ${ var Int, let String }, %5 : ${}, %6 : ${ var XX, let ZZ }>): unreachable } // CHECK-LABEL: sil @box_type_parsing_in_generic_function : $@convention(thin) ( sil @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 : ${ var E }, %1 : ${ let F }, %2 : ${ var G }, %3 : ${ let Int }, %4 : ${ var Int, let String }, %5 : ${}, %6 : ${ var XX, let ZZ }>): unreachable } // CHECK-LABEL: sil @same_generic_param_name_in_multiple_box_signatures : $@convention(thin) ( sil @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 : $ { var A } , %1 : $ { var A } ): unreachable } // CHECK-LABEL: sil @same_generic_param_name_in_outer_scope : $@convention(thin) ( sil @same_generic_param_name_in_outer_scope : $@convention(thin) ( // CHECK: <τ_0_0> { var τ_0_0 } { var A } // CHECK: ) -> () ) -> () { entry(%0 : $ { var B } ): unreachable } // CHECK-LABEL: sil @box_ownership : $@convention(thin) (@owned { var Int }, @guaranteed <τ_0_0> { let τ_0_0 } ) -> () sil @box_ownership : $@convention(thin) (@owned { var Int }, @guaranteed { let T } ) -> () { entry(%0 : ${ var Int }, %1 : $ { let T } ): unreachable } // CHECK-LABEL: sil @address_of_box sil @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 }