Merge pull request #82430 from xedin/issue-82397

[CSSimplify] Prevent `missing call` fix from recording fixes while ma…
This commit is contained in:
Pavel Yaskevich
2025-06-24 09:12:33 -07:00
committed by GitHub
2 changed files with 18 additions and 0 deletions

View File

@@ -5365,6 +5365,11 @@ bool ConstraintSystem::repairFailures(
matchKind = ConstraintKind::Conversion; matchKind = ConstraintKind::Conversion;
} }
// FIXME: There is currently no easy way to avoid attempting
// fixes, matchTypes do not propagate `TMF_ApplyingFix` flag.
llvm::SaveAndRestore<ConstraintSystemOptions> options(
Options, Options - ConstraintSystemFlags::AllowFixes);
auto result = matchTypes(resultType, dstType, matchKind, auto result = matchTypes(resultType, dstType, matchKind,
TypeMatchFlags::TMF_ApplyingFix, locator); TypeMatchFlags::TMF_ApplyingFix, locator);

View File

@@ -88,3 +88,16 @@ class С_56396 {
self.callback = callback // expected-error {{cannot assign value of type '(Self) -> Void' to type '(С_56396) -> Void'}} self.callback = callback // expected-error {{cannot assign value of type '(Self) -> Void' to type '(С_56396) -> Void'}}
} }
} }
// https://github.com/swiftlang/swift/issues/82397
func testFunctionAssignsWithOptionals(fn: @escaping () -> () -> Void) {
let _: (() -> () -> Void)? = fn
let _: (() -> () -> Void)?? = fn
class Super {}
class Sub: Super {}
let b: () -> () -> Sub = { { return Sub() } }
let _: (() -> () -> Super)? = b
let _: (() -> () -> Super)?? = b
}