diff --git a/lib/Sema/TypeCheckConstraints.cpp b/lib/Sema/TypeCheckConstraints.cpp index 6be0b113f8d..708f0459dba 100644 --- a/lib/Sema/TypeCheckConstraints.cpp +++ b/lib/Sema/TypeCheckConstraints.cpp @@ -669,12 +669,19 @@ Type TypeChecker::typeCheckParameterDefault(Expr *&defaultValue, affectedParams, [&](const unsigned index) { params << "#" << index; }, [&] { params << ", "; }); - ctx.Diags.diagnose( + auto diag = ctx.Diags.diagnose( defaultValue->getLoc(), diag:: cannot_default_generic_parameter_inferrable_from_another_parameter, paramInterfaceTy, params.str()); - return Type(); + + // In Swift 6.2 and below we incorrectly missed checking this rule for + // methods, downgrade to a warning until the next language mode. + auto futureVersion = version::Version::getFutureMajorLanguageVersion(); + if (!anchor->hasCurriedSelf() || ctx.isSwiftVersionAtLeast(futureVersion)) + return Type(); + + diag.warnUntilFutureSwiftVersion(); } } diff --git a/test/Constraints/type_inference_from_default_exprs.swift b/test/Constraints/type_inference_from_default_exprs.swift index a7134e805ce..328b31d3a7f 100644 --- a/test/Constraints/type_inference_from_default_exprs.swift +++ b/test/Constraints/type_inference_from_default_exprs.swift @@ -278,7 +278,7 @@ func testInferenceFromClosureVarInvalid(x: T = { let x = "" as Int; return x // https://github.com/swiftlang/swift/issues/72199 enum S72199_1 { func testS72199_1(_: T = 42, _: [T]) {} - // expected-error@-1 {{cannot use default expression for inference of 'T' because it is inferrable from parameters #0, #1}} + // expected-warning@-1 {{cannot use default expression for inference of 'T' because it is inferrable from parameters #0, #1; this will be an error in a future Swift language mode}} } func testS72199_2(x: T.X, y: T = S()) { } // Ok diff --git a/test/Constraints/type_inference_from_default_exprs_swift7.swift b/test/Constraints/type_inference_from_default_exprs_swift7.swift new file mode 100644 index 00000000000..3c84135b612 --- /dev/null +++ b/test/Constraints/type_inference_from_default_exprs_swift7.swift @@ -0,0 +1,11 @@ +// RUN: %target-typecheck-verify-swift -swift-version 7 +// REQUIRES: swift7 + +// https://github.com/swiftlang/swift/issues/72199 +enum S72199_1 { + func testS72199_1(_: T = 42, _: [T]) {} + // expected-error@-1 {{cannot use default expression for inference of 'T' because it is inferrable from parameters #0, #1}} +} + +func testS72199(_: T = 42, _: [T]) {} +// expected-error@-1 {{cannot use default expression for inference of 'T' because it is inferrable from parameters #0, #1}}