Skip to content

Commit 5f68f7a

Browse files
committed
Make escaping_optional_type_argument to be an error, use it instead of original message when object type is a function type
1 parent 3dacbed commit 5f68f7a

File tree

3 files changed

+13
-15
lines changed

3 files changed

+13
-15
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2856,8 +2856,8 @@ ERROR(autoclosure_function_input_nonunit,none,
28562856
ERROR(escaping_non_function_parameter,none,
28572857
"@escaping attribute may only be used in function parameter position", ())
28582858

2859-
NOTE(escaping_optional_type_argument, none,
2860-
"closure is already escaping in optional type argument", ())
2859+
ERROR(escaping_optional_type_argument, none,
2860+
"closure is already escaping in optional type argument", ())
28612861

28622862
// @_nonEphemeral attribute
28632863
ERROR(non_ephemeral_non_pointer_type,none,
@@ -4047,8 +4047,6 @@ NOTE(overridden_required_initializer_here,none,
40474047
// Functions
40484048
ERROR(attribute_requires_function_type,none,
40494049
"@%0 attribute only applies to function types", (StringRef))
4050-
ERROR(optional_closures_are_already_escaping,none,
4051-
"Optional closures are already @escaping", ())
40524050
ERROR(unsupported_convention,none,
40534051
"convention '%0' not supported", (StringRef))
40544052
ERROR(unreferenced_generic_parameter,none,

lib/Sema/TypeCheckType.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2416,19 +2416,19 @@ Type TypeResolver::resolveAttributedType(TypeAttributes &attrs,
24162416

24172417
if (i == TAK_escaping && ty->getOptionalObjectType()) {
24182418
auto diag = diagnoseInvalid(repr, attrs.getLoc(i),
2419-
diag::optional_closures_are_already_escaping);
2420-
diag.fixItRemove(getTypeAttrRangeWithAt(Context,
2421-
attrs.getLoc(TAK_escaping)));
2419+
diag::escaping_optional_type_argument);
2420+
diag.fixItRemove(
2421+
getTypeAttrRangeWithAt(Context, attrs.getLoc(TAK_escaping)));
24222422
} else {
24232423
auto diag = diagnoseInvalid(repr, attrs.getLoc(i),
24242424
diag::attribute_requires_function_type,
24252425
TypeAttributes::getAttrName(i));
24262426

2427-
// If we see @escaping among the attributes on this type, because it isn't
2428-
// a function type, we'll remove it.
2427+
// If we see @escaping among the attributes on this type, because it
2428+
// isn't a function type, we'll remove it.
24292429
if (i == TAK_escaping) {
2430-
diag.fixItRemove(getTypeAttrRangeWithAt(Context,
2431-
attrs.getLoc(TAK_escaping)));
2430+
diag.fixItRemove(
2431+
getTypeAttrRangeWithAt(Context, attrs.getLoc(TAK_escaping)));
24322432
}
24332433
}
24342434
attrs.clearAttribute(i);

test/attr/attr_escaping.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,14 @@ struct GenericStruct<T> {}
7272

7373
func misuseEscaping(_ a: @escaping Int) {} // expected-error{{@escaping attribute only applies to function types}} {{26-36=}}
7474
func misuseEscaping(_ a: (@escaping Int)?) {} // expected-error{{@escaping attribute only applies to function types}} {{27-36=}}
75-
func misuseEscaping(opt a: @escaping ((Int) -> Int)?) {} // expected-error{{Optional closures are already @escaping}} {{28-38=}}
75+
func misuseEscaping(opt a: @escaping ((Int) -> Int)?) {} // expected-error{{closure is already escaping in optional type argument}} {{28-38=}}
7676

7777
func misuseEscaping(_ a: (@escaping (Int) -> Int)?) {} // expected-error{{@escaping attribute may only be used in function parameter position}} {{27-36=}}
78-
// expected-note@-1{{closure is already escaping in optional type argument}}
78+
// expected-error@-1{{closure is already escaping in optional type argument}}
7979
func misuseEscaping(nest a: (((@escaping (Int) -> Int))?)) {} // expected-error{{@escaping attribute may only be used in function parameter position}} {{32-41=}}
80-
// expected-note@-1{{closure is already escaping in optional type argument}}
80+
// expected-error@-1{{closure is already escaping in optional type argument}}
8181
func misuseEscaping(iuo a: (@escaping (Int) -> Int)!) {} // expected-error{{@escaping attribute may only be used in function parameter position}} {{29-38=}}
82-
// expected-note@-1{{closure is already escaping in optional type argument}}
82+
// expected-error@-1{{closure is already escaping in optional type argument}}
8383

8484
func misuseEscaping(_ a: Optional<@escaping (Int) -> Int>, _ b: Int) {} // expected-error{{@escaping attribute may only be used in function parameter position}} {{35-44=}}
8585
func misuseEscaping(_ a: (@escaping (Int) -> Int, Int)) {} // expected-error{{@escaping attribute may only be used in function parameter position}} {{27-36=}}

0 commit comments

Comments
 (0)