@@ -124,3 +124,52 @@ func test_static_members_are_contextually_convertible() {
124
124
return S . testFunc ( ) // Ok
125
125
}
126
126
}
127
+
128
+ func test_narrowing_is_delayed( x: Double , y: CGFloat ) {
129
+ func test( _: CGFloat ) { }
130
+
131
+ func overloaded( _: Double , _: Double ) -> Double { }
132
+ func overloaded( _: CGFloat , _: CGFloat ) -> CGFloat { }
133
+
134
+ // CHECK: function_ref @$sSd12CoreGraphicsEySdAA7CGFloatVcfC
135
+ // CHECK: function_ref @$sSd1doiyS2d_SdtFZ
136
+ // CHECK: function_ref @$s12CoreGraphics7CGFloatVyACSdcfC
137
+ let _: CGFloat = x / y // CGFloat.init(x / Double.init(y))
138
+ // CHECK: function_ref @$sSd12CoreGraphicsEySdAA7CGFloatVcfC
139
+ // CHECK: function_ref @$sSd1doiyS2d_SdtFZ
140
+ // CHECK: function_ref @$sSd22_builtinIntegerLiteralSdBI_tcfC
141
+ // CHECK: function_ref @$sSd1poiyS2d_SdtFZ
142
+ // CHECK: function_ref @$s12CoreGraphics7CGFloatVyACSdcfC
143
+ let _: CGFloat = x / y + 1 // CGFloat.init(x / Double(y) + 1 as Double)
144
+ // CHECK: function_ref @$sSd12CoreGraphicsEySdAA7CGFloatVcfC
145
+ // CHECK: function_ref @$s34implicit_double_cgfloat_conversion25test_narrowing_is_delayed1x1yySd_12CoreGraphics7CGFloatVtF10overloadedL_yS2d_SdtF
146
+ // CHECK: function_ref @$s12CoreGraphics7CGFloatVyACSdcf
147
+ let _: CGFloat = overloaded ( x, y) // Prefers `overloaded(Double, Double) -> Double`
148
+ // CHECK: function_ref @$sSd12CoreGraphicsEySdAA7CGFloatVcfC
149
+ // CHECK: function_ref @$s34implicit_double_cgfloat_conversion25test_narrowing_is_delayed1x1yySd_12CoreGraphics7CGFloatVtF10overloadedL_yS2d_SdtF
150
+ // CHECK: @$s34implicit_double_cgfloat_conversion25test_narrowing_is_delayed1x1yySd_12CoreGraphics7CGFloatVtF10overloadedL_yS2d_SdtF
151
+ // CHECK: function_ref @$s12CoreGraphics7CGFloatVyACSdcf
152
+ let _: CGFloat = overloaded ( x, overloaded ( x, y) ) // Prefers `overloaded(Double, Double) -> Double` in both occurances.
153
+
154
+ // Calls should behave exactly the same as contextual conversions.
155
+
156
+ // CHECK: function_ref @$sSd12CoreGraphicsEySdAA7CGFloatVcfC
157
+ // CHECK: function_ref @$sSd1doiyS2d_SdtFZ
158
+ // CHECK: function_ref @$s12CoreGraphics7CGFloatVyACSdcfC
159
+ test ( x / y)
160
+ // CHECK: function_ref @$sSd12CoreGraphicsEySdAA7CGFloatVcfC
161
+ // CHECK: function_ref @$sSd1doiyS2d_SdtFZ
162
+ // CHECK: function_ref @$sSd22_builtinIntegerLiteralSdBI_tcfC
163
+ // CHECK: function_ref @$sSd1poiyS2d_SdtFZ
164
+ // CHECK: function_ref @$s12CoreGraphics7CGFloatVyACSdcfC
165
+ test ( x / y + 1 )
166
+ // CHECK: function_ref @$sSd12CoreGraphicsEySdAA7CGFloatVcfC
167
+ // CHECK: function_ref @$s34implicit_double_cgfloat_conversion25test_narrowing_is_delayed1x1yySd_12CoreGraphics7CGFloatVtF10overloadedL_yS2d_SdtF
168
+ // CHECK: function_ref @$s12CoreGraphics7CGFloatVyACSdcf
169
+ test ( overloaded ( x, y) )
170
+ // CHECK: function_ref @$sSd12CoreGraphicsEySdAA7CGFloatVcfC
171
+ // CHECK: function_ref @$s34implicit_double_cgfloat_conversion25test_narrowing_is_delayed1x1yySd_12CoreGraphics7CGFloatVtF10overloadedL_yS2d_SdtF
172
+ // CHECK: @$s34implicit_double_cgfloat_conversion25test_narrowing_is_delayed1x1yySd_12CoreGraphics7CGFloatVtF10overloadedL_yS2d_SdtF
173
+ // CHECK: function_ref @$s12CoreGraphics7CGFloatVyACSdcf
174
+ test ( overloaded ( x, overloaded ( x, y) ) )
175
+ }
0 commit comments