Skip to content

Commit fb2d667

Browse files
authored
Merge pull request #74243 from gregomni/rvalue-ambiguous
[Sema] Score non-settable overload choices higher in RValueToLValue fix
2 parents 013cee4 + 843ce58 commit fb2d667

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

lib/Sema/CSSimplify.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15229,7 +15229,12 @@ ConstraintSystem::SolutionKind ConstraintSystem::simplifyFixConstraint(
1522915229
locator.endsWith<LocatorPathElt::SubscriptMember>())
1523015230
? 1
1523115231
: 0;
15232-
15232+
// An overload choice that isn't settable is least interesting for diagnosis.
15233+
if (auto overload = findSelectedOverloadFor(getCalleeLocator(fix->getLocator()))) {
15234+
if (auto *var = dyn_cast_or_null<VarDecl>(overload->choice.getDeclOrNull())) {
15235+
impact += !var->isSettableInSwift(DC) ? 1 : 0;
15236+
}
15237+
}
1523315238
return recordFix(fix, impact) ? SolutionKind::Error : SolutionKind::Solved;
1523415239
}
1523515240

test/Sema/immutability.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -762,3 +762,16 @@ struct S2<T> {
762762
// expected-note@-1 {{add explicit 'S2<T>.' to refer to mutable static property of 'S2<T>'}} {{5-5=S2<T>.}}
763763
}
764764
}
765+
766+
// SR-3680, https://github.com/apple/swift/issues/46265
767+
protocol HasFoo {
768+
var foo: String { get }
769+
}
770+
protocol CanSetFoo {
771+
var foo: String { get set }
772+
}
773+
extension HasFoo where Self: CanSetFoo {
774+
func bar() { // expected-note {{mark method 'mutating' to make 'self' mutable}}{{3-3=mutating }}
775+
self.foo = "bar" // expected-error {{cannot assign to property: 'self' is immutable}}
776+
}
777+
}

0 commit comments

Comments
 (0)