Skip to content

Commit 51d817c

Browse files
authored
Merge pull request #74242 from iMostfa/feature/SR-9615-escaping-and-inout-support
Remove `@escaping` from inout closures
2 parents 6329eef + 9769418 commit 51d817c

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4020,6 +4020,9 @@ ERROR(autoclosure_function_input_nonunit,none,
40204020
ERROR(escaping_non_function_parameter,none,
40214021
"@escaping attribute may only be used in function parameter position", ())
40224022

4023+
ERROR(escaping_inout_parameter,none,
4024+
"inout expression is implicitly escaping", ())
4025+
40234026
ERROR(escaping_optional_type_argument, none,
40244027
"closure is already escaping in optional type argument", ())
40254028

lib/Sema/TypeCheckType.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3393,6 +3393,10 @@ TypeResolver::resolveAttributedType(TypeRepr *repr, TypeResolutionOptions option
33933393
diagnoseInvalid(repr, repr->getLoc(),
33943394
diag::escaping_optional_type_argument)
33953395
.fixItRemove(attrRange);
3396+
} else if (options.is(TypeResolverContext::InoutFunctionInput)) {
3397+
diagnoseInvalid(repr, repr->getLoc(),
3398+
diag::escaping_inout_parameter)
3399+
.fixItRemove(attrRange);
33963400
} else {
33973401
diagnoseInvalid(repr, loc, diag::escaping_non_function_parameter)
33983402
.fixItRemove(attrRange);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// RUN: %target-typecheck-verify-swift
2+
3+
let _: (_ v: inout @escaping () -> Void) -> ()
4+
// expected-error@-1 {{inout expression is implicitly escaping}}{{20-30=}}
5+
6+
func m(v: inout @escaping () -> Void) {}
7+
// expected-error@-1 {{inout expression is implicitly escaping}}{{17-27=}}

0 commit comments

Comments
 (0)