File tree Expand file tree Collapse file tree 2 files changed +48
-2
lines changed Expand file tree Collapse file tree 2 files changed +48
-2
lines changed Original file line number Diff line number Diff line change @@ -5343,8 +5343,17 @@ bool ExtraneousReturnFailure::diagnoseAsError() {
5343
5343
if (FD->getResultTypeRepr () == nullptr &&
5344
5344
FD->getParameters ()->getStartLoc ().isValid () &&
5345
5345
!FD->getBaseIdentifier ().empty ()) {
5346
- auto fixItLoc = Lexer::getLocForEndOfToken (
5347
- getASTContext ().SourceMgr , FD->getParameters ()->getEndLoc ());
5346
+ // Insert the fix-it after the parameter list, and after any
5347
+ // effects specifiers.
5348
+ SourceLoc loc = FD->getParameters ()->getEndLoc ();
5349
+ if (auto asyncLoc = FD->getAsyncLoc ())
5350
+ loc = asyncLoc;
5351
+
5352
+ if (auto throwsLoc = FD->getThrowsLoc ())
5353
+ if (throwsLoc.getOpaquePointerValue () > loc.getOpaquePointerValue ())
5354
+ loc = throwsLoc;
5355
+
5356
+ auto fixItLoc = Lexer::getLocForEndOfToken (getASTContext ().SourceMgr , loc);
5348
5357
emitDiagnostic (diag::add_return_type_note)
5349
5358
.fixItInsert (fixItLoc, " -> <#Return Type#>" );
5350
5359
}
Original file line number Diff line number Diff line change @@ -1213,6 +1213,43 @@ func voidFuncWithNestedVoidFunc() {
1213
1213
}
1214
1214
}
1215
1215
1216
+ func voidFuncWithEffects1( ) throws {
1217
+ return 1
1218
+ // expected-error@-1 {{unexpected non-void return value in void function}}
1219
+ // expected-note@-2 {{did you mean to add a return type?}}{{35-35= -> <#Return Type#>}}
1220
+ }
1221
+
1222
+ func voidFuncWithEffects2( ) async throws {
1223
+ return 1
1224
+ // expected-error@-1 {{unexpected non-void return value in void function}}
1225
+ // expected-note@-2 {{did you mean to add a return type?}}{{41-41= -> <#Return Type#>}}
1226
+ }
1227
+
1228
+ // expected-error@+1 {{'async' must precede 'throws'}}
1229
+ func voidFuncWithEffects3( ) throws async {
1230
+ return 1
1231
+ // expected-error@-1 {{unexpected non-void return value in void function}}
1232
+ // expected-note@-2 {{did you mean to add a return type?}}{{41-41= -> <#Return Type#>}}
1233
+ }
1234
+
1235
+ func voidFuncWithEffects4( ) async {
1236
+ return 1
1237
+ // expected-error@-1 {{unexpected non-void return value in void function}}
1238
+ // expected-note@-2 {{did you mean to add a return type?}}{{34-34= -> <#Return Type#>}}
1239
+ }
1240
+
1241
+ func voidFuncWithEffects5( _ closure: ( ) throws -> Void ) rethrows {
1242
+ return 1
1243
+ // expected-error@-1 {{unexpected non-void return value in void function}}
1244
+ // expected-note@-2 {{did you mean to add a return type?}}{{65-65= -> <#Return Type#>}}
1245
+ }
1246
+
1247
+ func voidGenericFuncWithEffects< T> ( arg: T ) async where T: CustomStringConvertible {
1248
+ return 1
1249
+ // expected-error@-1 {{unexpected non-void return value in void function}}
1250
+ // expected-note@-2 {{did you mean to add a return type?}}{{49-49= -> <#Return Type#>}}
1251
+ }
1252
+
1216
1253
// Special cases: These should not offer a note + fix-it
1217
1254
1218
1255
func voidFuncExplicitType( ) -> Void {
You can’t perform that action at this time.
0 commit comments