File tree Expand file tree Collapse file tree 2 files changed +63
-1
lines changed Expand file tree Collapse file tree 2 files changed +63
-1
lines changed Original file line number Diff line number Diff line change @@ -14805,13 +14805,26 @@ ConstraintSystem::simplifyRestrictedConstraintImpl(
1480514805 case ConversionRestrictionKind::CGFloatToDouble: {
1480614806 // Prefer CGFloat -> Double over other way araund.
1480714807 auto impact =
14808- restriction == ConversionRestrictionKind::CGFloatToDouble ? 1 : 10;
14808+ restriction == ConversionRestrictionKind::CGFloatToDouble ? 2 : 10;
1480914809
1481014810 if (restriction == ConversionRestrictionKind::DoubleToCGFloat) {
1481114811 if (auto *anchor = locator.trySimplifyToExpr()) {
1481214812 if (auto depth = getExprDepth(anchor))
1481314813 impact = (*depth + 1) * impact;
1481414814 }
14815+ } else if (locator.directlyAt<AssignExpr>() ||
14816+ locator.endsWith<LocatorPathElt::ContextualType>()) {
14817+ // Situations like:
14818+ //
14819+ // let _: Double = <<CGFloat>>
14820+ // <var/property of type Double> = <<CGFloat>>
14821+ //
14822+ // Used to be supported due to an incorrect fix added in
14823+ // diagnostic mode. Lower impact here means that right-hand
14824+ // side of the assignment is allowed to maintain CGFloat
14825+ // until the very end which minimizes the number of conversions
14826+ // used and keeps literals as Double when possible.
14827+ impact = 1;
1481514828 }
1481614829
1481714830 increaseScore(SK_ImplicitValueConversion, locator, impact);
Original file line number Diff line number Diff line change 1+ // RUN: %target-typecheck-verify-swift
2+
3+ // REQUIRES: objc_interop
4+
5+ // Note this cannot use a fake Foundation because it lacks required operator overloads
6+
7+ import Foundation
8+ import CoreGraphics
9+
10+ do {
11+ func test( a: CGFloat , b: CGFloat ) {
12+ let _: Double = a + b + 1 // Ok
13+ let _: Double = a + b + 1.0 // Ok
14+
15+ var test : Double
16+
17+ test = a + b + 1 // Ok
18+ test = a + b + 1.0 // Ok
19+
20+ _ = test
21+
22+ let _ = a + b + 1 // Ok
23+ let _ = a + b + 1.0 // Ok
24+
25+ let _: Double = 1 + 2 + 3 // Ok
26+
27+ test = 1 + 2 + 3 // Ok
28+ }
29+ }
30+
31+ func test( cond: Bool , a: CGFloat , b: CGFloat ) {
32+ var test : Double
33+
34+ let width = a - b // CGFloat
35+
36+ if cond {
37+ test = ( width - 10 ) / 2 // Ok
38+ } else {
39+ test = ( width - 20.0 ) / 3 // Ok
40+ }
41+
42+ _ = test
43+ }
44+
45+ func test_atan_ambiguity( points: ( CGPoint , CGPoint ) ) {
46+ var test = 0.0
47+ test = atan ( ( points. 1 . y - points. 0 . y) / ( points. 1 . x - points. 0 . x) ) // Ok
48+ _ = test
49+ }
You can’t perform that action at this time.
0 commit comments