Skip to content

Commit 300462e

Browse files
committed
fix <rdar://problem/27650521> Fixits for escaping closure parameters are inserted into wrong location
1 parent 328866a commit 300462e

File tree

3 files changed

+7
-5
lines changed

3 files changed

+7
-5
lines changed

lib/Sema/MiscDiagnostics.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,8 @@ static void diagSyntacticUseRestrictions(TypeChecker &TC, const Expr *E,
472472
if (paramDecl && !isAutoClosure) {
473473
TC.diagnose(paramDecl->getStartLoc(), diag::noescape_parameter,
474474
paramDecl->getName())
475-
.fixItInsert(paramDecl->getTypeLoc().getLoc(), "@escaping ");
475+
.fixItInsert(paramDecl->getTypeLoc().getSourceRange().Start,
476+
"@escaping ");
476477
} else if (isAutoClosure)
477478
// TODO: add in a fixit for autoclosure
478479
TC.diagnose(DRE->getDecl()->getLoc(), diag::noescape_autoclosure,

lib/Sema/TypeCheckCaptures.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ class FindCapturedVars : public ASTWalker {
165165
if (paramDecl && !isAutoClosure) {
166166
TC.diagnose(paramDecl->getStartLoc(), diag::noescape_parameter,
167167
paramDecl->getName())
168-
.fixItInsert(paramDecl->getTypeLoc().getLoc(), "@escaping ");
168+
.fixItInsert(paramDecl->getTypeLoc().getSourceRange().Start,
169+
"@escaping ");
169170
} else if (isAutoClosure) {
170171
// TODO: add in a fixit for autoclosure
171172
TC.diagnose(VD->getLoc(), diag::noescape_autoclosure, VD->getName());

test/attr/attr_noescape.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ func takesGenericClosure<T>(_ a : Int, _ fn : @noescape () -> T) {}
1010

1111

1212
func takesNoEscapeClosure(_ fn : () -> Int) {
13-
// expected-note@-1{{parameter 'fn' is implicitly non-escaping}}
14-
// expected-note@-2{{parameter 'fn' is implicitly non-escaping}}
15-
// expected-note@-3{{parameter 'fn' is implicitly non-escaping}}
13+
// expected-note@-1{{parameter 'fn' is implicitly non-escaping}} {{34-34=@escaping }}
14+
// expected-note@-2{{parameter 'fn' is implicitly non-escaping}} {{34-34=@escaping }}
15+
// expected-note@-3{{parameter 'fn' is implicitly non-escaping}} {{34-34=@escaping }}
1616
takesNoEscapeClosure { 4 } // ok
1717

1818
_ = fn() // ok

0 commit comments

Comments
 (0)